summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/linux_builds.yml2
-rw-r--r--core/config/project_settings.cpp5
-rw-r--r--core/core_bind.cpp18
-rw-r--r--core/core_bind.h2
-rw-r--r--core/math/color.h12
-rw-r--r--core/math/quaternion.cpp58
-rw-r--r--core/math/quaternion.h2
-rw-r--r--core/math/vector4.cpp22
-rw-r--r--core/math/vector4.h15
-rw-r--r--core/os/os.h2
-rw-r--r--core/variant/variant_call.cpp6
-rw-r--r--core/variant/variant_setget.cpp4
-rw-r--r--doc/classes/Decal.xml10
-rw-r--r--doc/classes/EditorFeatureProfile.xml2
-rw-r--r--doc/classes/Font.xml12
-rw-r--r--doc/classes/FontFile.xml2
-rw-r--r--doc/classes/Geometry2D.xml2
-rw-r--r--doc/classes/Label3D.xml6
-rw-r--r--doc/classes/NavigationRegion2D.xml2
-rw-r--r--doc/classes/NavigationRegion3D.xml2
-rw-r--r--doc/classes/OS.xml17
-rw-r--r--doc/classes/SkeletonProfile.xml2
-rw-r--r--doc/classes/SpriteBase3D.xml2
-rw-r--r--doc/classes/SystemFont.xml44
-rw-r--r--doc/classes/Vector4.xml101
-rw-r--r--doc/classes/Vector4i.xml6
-rwxr-xr-xdoc/tools/make_rst.py31
-rw-r--r--doc/translations/ar.po138
-rw-r--r--doc/translations/ca.po128
-rw-r--r--doc/translations/classes.pot142
-rw-r--r--doc/translations/cs.po133
-rw-r--r--doc/translations/de.po295
-rw-r--r--doc/translations/el.po128
-rw-r--r--doc/translations/es.po153
-rw-r--r--doc/translations/fa.po130
-rw-r--r--doc/translations/fi.po128
-rw-r--r--doc/translations/fil.po128
-rw-r--r--doc/translations/fr.po1277
-rw-r--r--doc/translations/gl.po128
-rw-r--r--doc/translations/hi.po128
-rw-r--r--doc/translations/hu.po128
-rw-r--r--doc/translations/id.po137
-rw-r--r--doc/translations/is.po128
-rw-r--r--doc/translations/it.po156
-rw-r--r--doc/translations/ja.po141
-rw-r--r--doc/translations/ko.po128
-rw-r--r--doc/translations/lt.po128
-rw-r--r--doc/translations/lv.po128
-rw-r--r--doc/translations/mr.po128
-rw-r--r--doc/translations/nb.po128
-rw-r--r--doc/translations/ne.po128
-rw-r--r--doc/translations/nl.po128
-rw-r--r--doc/translations/pl.po140
-rw-r--r--doc/translations/pt.po136
-rw-r--r--doc/translations/pt_BR.po139
-rw-r--r--doc/translations/ro.po128
-rw-r--r--doc/translations/ru.po140
-rw-r--r--doc/translations/sk.po128
-rw-r--r--doc/translations/sr_Cyrl.po128
-rw-r--r--doc/translations/sv.po139
-rw-r--r--doc/translations/th.po128
-rw-r--r--doc/translations/tl.po128
-rw-r--r--doc/translations/tr.po148
-rw-r--r--doc/translations/uk.po128
-rw-r--r--doc/translations/vi.po133
-rw-r--r--doc/translations/zh_CN.po336
-rw-r--r--doc/translations/zh_TW.po128
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp358
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.h99
-rw-r--r--drivers/gles3/shaders/cubemap_filter.glsl88
-rw-r--r--drivers/gles3/storage/material_storage.cpp47
-rw-r--r--drivers/vulkan/rendering_device_vulkan.cpp26
-rw-r--r--drivers/vulkan/vulkan_context.cpp7
-rw-r--r--drivers/vulkan/vulkan_context.h10
-rw-r--r--editor/SCsub3
-rw-r--r--editor/debugger/debug_adapter/debug_adapter_parser.cpp1
-rw-r--r--editor/editor_export.h532
-rw-r--r--editor/editor_node.cpp13
-rw-r--r--editor/editor_node.h2
-rw-r--r--editor/editor_plugin.cpp2
-rw-r--r--editor/editor_properties_array_dict.h37
-rw-r--r--editor/editor_run_native.cpp2
-rw-r--r--editor/export/SCsub5
-rw-r--r--editor/export/editor_export.cpp355
-rw-r--r--editor/export/editor_export.h84
-rw-r--r--editor/export/editor_export_platform.cpp (renamed from editor/editor_export.cpp)907
-rw-r--r--editor/export/editor_export_platform.h221
-rw-r--r--editor/export/editor_export_platform_pc.cpp247
-rw-r--r--editor/export/editor_export_platform_pc.h82
-rw-r--r--editor/export/editor_export_plugin.cpp201
-rw-r--r--editor/export/editor_export_plugin.h132
-rw-r--r--editor/export/editor_export_preset.cpp221
-rw-r--r--editor/export/editor_export_preset.h145
-rw-r--r--editor/export/editor_export_shared_object.h51
-rw-r--r--editor/export/export_template_manager.cpp (renamed from editor/export_template_manager.cpp)9
-rw-r--r--editor/export/export_template_manager.h (renamed from editor/export_template_manager.h)12
-rw-r--r--editor/export/project_export.cpp (renamed from editor/project_export.cpp)20
-rw-r--r--editor/export/project_export.h (renamed from editor/project_export.h)32
-rw-r--r--editor/icons/FontFile.svg2
-rw-r--r--editor/icons/FontVariation.svg2
-rw-r--r--editor/icons/SystemFont.svg1
-rw-r--r--editor/plugins/font_config_plugin.cpp136
-rw-r--r--editor/plugins/font_config_plugin.h31
-rw-r--r--editor/plugins/gdextension_export_plugin.h2
-rw-r--r--editor/plugins/material_editor_plugin.cpp8
-rw-r--r--editor/plugins/tiles/tiles_editor_plugin.cpp10
-rw-r--r--editor/project_settings_editor.cpp1
-rw-r--r--editor/property_editor.cpp1
-rw-r--r--editor/scene_tree_dock.cpp6
-rw-r--r--editor/translations/af.po22
-rw-r--r--editor/translations/ar.po393
-rw-r--r--editor/translations/az.po22
-rw-r--r--editor/translations/bg.po22
-rw-r--r--editor/translations/bn.po22
-rw-r--r--editor/translations/br.po22
-rw-r--r--editor/translations/ca.po22
-rw-r--r--editor/translations/cs.po22
-rw-r--r--editor/translations/da.po22
-rw-r--r--editor/translations/de.po32
-rw-r--r--editor/translations/editor.pot21
-rw-r--r--editor/translations/el.po22
-rw-r--r--editor/translations/en_Shaw.po22
-rw-r--r--editor/translations/eo.po22
-rw-r--r--editor/translations/es.po2327
-rw-r--r--editor/translations/es_AR.po106
-rw-r--r--editor/translations/et.po22
-rw-r--r--editor/translations/eu.po22
-rw-r--r--editor/translations/fa.po22
-rw-r--r--editor/translations/fi.po22
-rw-r--r--editor/translations/fil.po22
-rw-r--r--editor/translations/fr.po22
-rw-r--r--editor/translations/ga.po22
-rw-r--r--editor/translations/gl.po22
-rw-r--r--editor/translations/he.po22
-rw-r--r--editor/translations/hi.po22
-rw-r--r--editor/translations/hr.po90
-rw-r--r--editor/translations/hu.po22
-rw-r--r--editor/translations/id.po31
-rw-r--r--editor/translations/is.po22
-rw-r--r--editor/translations/it.po71
-rw-r--r--editor/translations/ja.po22
-rw-r--r--editor/translations/ka.po22
-rw-r--r--editor/translations/km.po22
-rw-r--r--editor/translations/ko.po22
-rw-r--r--editor/translations/lt.po22
-rw-r--r--editor/translations/lv.po22
-rw-r--r--editor/translations/mk.po60
-rw-r--r--editor/translations/ml.po22
-rw-r--r--editor/translations/mr.po22
-rw-r--r--editor/translations/ms.po22
-rw-r--r--editor/translations/nb.po22
-rw-r--r--editor/translations/nl.po22
-rw-r--r--editor/translations/pl.po22
-rw-r--r--editor/translations/pr.po22
-rw-r--r--editor/translations/pt.po30
-rw-r--r--editor/translations/pt_BR.po1870
-rw-r--r--editor/translations/ro.po22
-rw-r--r--editor/translations/ru.po272
-rw-r--r--editor/translations/si.po22
-rw-r--r--editor/translations/sk.po22
-rw-r--r--editor/translations/sl.po22
-rw-r--r--editor/translations/sq.po22
-rw-r--r--editor/translations/sr_Cyrl.po22
-rw-r--r--editor/translations/sr_Latn.po22
-rw-r--r--editor/translations/sv.po422
-rw-r--r--editor/translations/te.po22
-rw-r--r--editor/translations/th.po22
-rw-r--r--editor/translations/tl.po22
-rw-r--r--editor/translations/tr.po318
-rw-r--r--editor/translations/uk.po30
-rw-r--r--editor/translations/ur_PK.po22
-rw-r--r--editor/translations/vi.po22
-rw-r--r--editor/translations/zh_CN.po34
-rw-r--r--editor/translations/zh_HK.po22
-rw-r--r--editor/translations/zh_TW.po27
-rw-r--r--modules/gdscript/gdscript_byte_codegen.cpp2
-rw-r--r--modules/gdscript/register_types.cpp2
-rw-r--r--modules/openxr/action_map/openxr_interaction_profile.cpp2
-rw-r--r--modules/openxr/doc_classes/OpenXRIPBinding.xml2
-rw-r--r--platform/android/export/export.cpp4
-rw-r--r--platform/android/export/export_plugin.h2
-rw-r--r--platform/android/export/gradle_export_util.h2
-rw-r--r--platform/android/file_access_filesystem_jandroid.cpp46
-rw-r--r--platform/android/file_access_filesystem_jandroid.h1
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt33
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt9
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt3
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt19
-rw-r--r--platform/ios/export/export.cpp1
-rw-r--r--platform/ios/export/export_plugin.h2
-rw-r--r--platform/ios/os_ios.h3
-rw-r--r--platform/ios/os_ios.mm75
-rw-r--r--platform/javascript/export/export_plugin.h2
-rw-r--r--platform/javascript/export/export_server.h1
-rw-r--r--platform/linuxbsd/detect.py6
-rw-r--r--platform/linuxbsd/export/export.cpp1
-rw-r--r--platform/linuxbsd/export/export_plugin.h2
-rw-r--r--platform/linuxbsd/os_linuxbsd.cpp89
-rw-r--r--platform/linuxbsd/os_linuxbsd.h3
-rw-r--r--platform/macos/export/export_plugin.h2
-rw-r--r--platform/macos/os_macos.h2
-rw-r--r--platform/macos/os_macos.mm74
-rw-r--r--platform/uwp/export/app_packager.h2
-rw-r--r--platform/uwp/export/export_plugin.h2
-rw-r--r--platform/windows/detect.py2
-rw-r--r--platform/windows/export/export.cpp1
-rw-r--r--platform/windows/export/export_plugin.h2
-rw-r--r--platform/windows/os_windows.cpp130
-rw-r--r--platform/windows/os_windows.h23
-rw-r--r--scene/2d/tile_map.cpp3
-rw-r--r--scene/3d/decal.cpp9
-rw-r--r--scene/3d/decal.h4
-rw-r--r--scene/3d/joint_3d.cpp116
-rw-r--r--scene/3d/visual_instance_3d.cpp9
-rw-r--r--scene/gui/control.cpp2897
-rw-r--r--scene/gui/control.h323
-rw-r--r--scene/gui/text_edit.cpp6
-rw-r--r--scene/main/viewport.cpp14
-rw-r--r--scene/register_scene_types.cpp1
-rw-r--r--scene/resources/font.cpp377
-rw-r--r--scene/resources/font.h72
-rw-r--r--scene/resources/material.cpp93
-rw-r--r--scene/resources/material.h11
-rw-r--r--scene/resources/shader.cpp14
-rw-r--r--scene/resources/shader.h2
-rw-r--r--scene/resources/tile_set.cpp55
-rw-r--r--scene/resources/tile_set.h3
-rw-r--r--scene/resources/visual_shader.cpp6
-rw-r--r--servers/movie_writer/movie_writer.cpp15
-rw-r--r--servers/movie_writer/movie_writer.h2
-rw-r--r--servers/rendering/dummy/rasterizer_scene_dummy.h35
-rw-r--r--servers/rendering/renderer_geometry_instance.cpp138
-rw-r--r--servers/rendering/renderer_geometry_instance.h150
-rw-r--r--servers/rendering/renderer_rd/environment/fog.cpp15
-rw-r--r--servers/rendering/renderer_rd/environment/gi.cpp10
-rw-r--r--servers/rendering/renderer_rd/environment/gi.h6
-rw-r--r--servers/rendering/renderer_rd/environment/sky.cpp29
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp221
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h113
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp17
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp248
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h102
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp17
-rw-r--r--servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp17
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.cpp14
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.h29
-rw-r--r--servers/rendering/renderer_rd/storage_rd/particles_storage.cpp15
-rw-r--r--servers/rendering/renderer_rd/storage_rd/texture_storage.h4
-rw-r--r--servers/rendering/renderer_scene_cull.cpp96
-rw-r--r--servers/rendering/renderer_scene_cull.h14
-rw-r--r--servers/rendering/renderer_scene_render.cpp3
-rw-r--r--servers/rendering/renderer_scene_render.h47
-rw-r--r--servers/rendering/renderer_viewport.h37
-rw-r--r--servers/rendering/shader_language.cpp61
-rw-r--r--servers/rendering/shader_language.h6
255 files changed, 15146 insertions, 9463 deletions
diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml
index 56c41aa749..aa862168b1 100644
--- a/.github/workflows/linux_builds.yml
+++ b/.github/workflows/linux_builds.yml
@@ -115,7 +115,7 @@ jobs:
sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \
libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev \
libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip \
- llvm libspeechd-dev speech-dispatcher
+ llvm libspeechd-dev speech-dispatcher fontconfig libfontconfig-dev
- name: Setup Godot build cache
uses: ./.github/actions/godot-cache
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp
index f9bac58ffa..38db7f9190 100644
--- a/core/config/project_settings.cpp
+++ b/core/config/project_settings.cpp
@@ -511,8 +511,9 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
if (found) {
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
if (err == OK && !p_ignore_override) {
- // Load override from location of the executable.
- // Optional, we don't mind if it fails.
+ // Load overrides from the PCK and the executable location.
+ // Optional, we don't mind if either fails.
+ _load_settings_text("res://override.cfg");
_load_settings_text(exec_path.get_base_dir().plus_file("override.cfg"));
}
return err;
diff --git a/core/core_bind.cpp b/core/core_bind.cpp
index 26ecd41353..8e776d6f05 100644
--- a/core/core_bind.cpp
+++ b/core/core_bind.cpp
@@ -231,6 +231,14 @@ void OS::crash(const String &p_message) {
CRASH_NOW_MSG(p_message);
}
+Vector<String> OS::get_system_fonts() const {
+ return ::OS::get_singleton()->get_system_fonts();
+}
+
+String OS::get_system_font_path(const String &p_font_name, bool p_bold, bool p_italic) const {
+ return ::OS::get_singleton()->get_system_font_path(p_font_name, p_bold, p_italic);
+}
+
String OS::get_executable_path() const {
return ::OS::get_singleton()->get_executable_path();
}
@@ -589,6 +597,8 @@ void OS::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_processor_count"), &OS::get_processor_count);
ClassDB::bind_method(D_METHOD("get_processor_name"), &OS::get_processor_name);
+ ClassDB::bind_method(D_METHOD("get_system_fonts"), &OS::get_system_fonts);
+ ClassDB::bind_method(D_METHOD("get_system_font_path", "font_name", "bold", "italic"), &OS::get_system_font_path, DEFVAL(false), DEFVAL(false));
ClassDB::bind_method(D_METHOD("get_executable_path"), &OS::get_executable_path);
ClassDB::bind_method(D_METHOD("execute", "path", "arguments", "output", "read_stderr", "open_console"), &OS::execute, DEFVAL(Array()), DEFVAL(false), DEFVAL(false));
ClassDB::bind_method(D_METHOD("create_process", "path", "arguments", "open_console"), &OS::create_process, DEFVAL(false));
@@ -1220,16 +1230,10 @@ Vector<uint8_t> File::get_buffer(int64_t p_length) const {
String File::get_as_text() const {
ERR_FAIL_COND_V_MSG(f.is_null(), String(), "File must be opened before use, or is lacking read-write permission.");
- String text;
uint64_t original_pos = f->get_position();
const_cast<FileAccess *>(*f)->seek(0);
- String l = get_line();
- while (!eof_reached()) {
- text += l + "\n";
- l = get_line();
- }
- text += l;
+ String text = f->get_as_utf8_string();
const_cast<FileAccess *>(*f)->seek(original_pos);
diff --git a/core/core_bind.h b/core/core_bind.h
index c116ac4986..e222a220f0 100644
--- a/core/core_bind.h
+++ b/core/core_bind.h
@@ -170,6 +170,8 @@ public:
void alert(const String &p_alert, const String &p_title = "ALERT!");
void crash(const String &p_message);
+ Vector<String> get_system_fonts() const;
+ String get_system_font_path(const String &p_font_name, bool p_bold = false, bool p_italic = false) const;
String get_executable_path() const;
int execute(const String &p_path, const Vector<String> &p_arguments, Array r_output = Array(), bool p_read_stderr = false, bool p_open_console = false);
int create_process(const String &p_path, const Vector<String> &p_arguments, bool p_open_console = false);
diff --git a/core/math/color.h b/core/math/color.h
index 0afa6006a8..65036f74cc 100644
--- a/core/math/color.h
+++ b/core/math/color.h
@@ -215,12 +215,12 @@ struct _NO_DISCARD_ Color {
_FORCE_INLINE_ void set_a8(int32_t a8) { a = (CLAMP(a8, 0, 255) / 255.0f); }
_FORCE_INLINE_ int32_t get_a8() const { return int32_t(CLAMP(Math::round(a * 255.0f), 0.0f, 255.0f)); }
- _FORCE_INLINE_ void set_h(float p_h) { set_hsv(p_h, get_s(), get_v()); }
- _FORCE_INLINE_ void set_s(float p_s) { set_hsv(get_h(), p_s, get_v()); }
- _FORCE_INLINE_ void set_v(float p_v) { set_hsv(get_h(), get_s(), p_v); }
- _FORCE_INLINE_ void set_ok_hsl_h(float p_h) { set_ok_hsl(p_h, get_ok_hsl_s(), get_ok_hsl_l()); }
- _FORCE_INLINE_ void set_ok_hsl_s(float p_s) { set_ok_hsl(get_ok_hsl_h(), p_s, get_ok_hsl_l()); }
- _FORCE_INLINE_ void set_ok_hsl_l(float p_l) { set_ok_hsl(get_ok_hsl_h(), get_ok_hsl_s(), p_l); }
+ _FORCE_INLINE_ void set_h(float p_h) { set_hsv(p_h, get_s(), get_v(), a); }
+ _FORCE_INLINE_ void set_s(float p_s) { set_hsv(get_h(), p_s, get_v(), a); }
+ _FORCE_INLINE_ void set_v(float p_v) { set_hsv(get_h(), get_s(), p_v, a); }
+ _FORCE_INLINE_ void set_ok_hsl_h(float p_h) { set_ok_hsl(p_h, get_ok_hsl_s(), get_ok_hsl_l(), a); }
+ _FORCE_INLINE_ void set_ok_hsl_s(float p_s) { set_ok_hsl(get_ok_hsl_h(), p_s, get_ok_hsl_l(), a); }
+ _FORCE_INLINE_ void set_ok_hsl_l(float p_l) { set_ok_hsl(get_ok_hsl_h(), get_ok_hsl_s(), p_l, a); }
_FORCE_INLINE_ Color() {}
diff --git a/core/math/quaternion.cpp b/core/math/quaternion.cpp
index 11bfcc1a6f..bb3b1ca63c 100644
--- a/core/math/quaternion.cpp
+++ b/core/math/quaternion.cpp
@@ -111,7 +111,7 @@ Quaternion Quaternion::log() const {
Quaternion Quaternion::exp() const {
Quaternion src = *this;
Vector3 src_v = Vector3(src.x, src.y, src.z);
- float theta = src_v.length();
+ real_t theta = src_v.length();
if (theta < CMP_EPSILON) {
return Quaternion(0, 0, 0, 1);
}
@@ -132,15 +132,9 @@ Quaternion Quaternion::slerp(const Quaternion &p_to, const real_t &p_weight) con
// adjust signs (if necessary)
if (cosom < 0.0f) {
cosom = -cosom;
- to1.x = -p_to.x;
- to1.y = -p_to.y;
- to1.z = -p_to.z;
- to1.w = -p_to.w;
+ to1 = -p_to;
} else {
- to1.x = p_to.x;
- to1.y = p_to.y;
- to1.z = p_to.z;
- to1.w = p_to.w;
+ to1 = p_to;
}
// calculate coefficients
@@ -194,11 +188,45 @@ Quaternion Quaternion::cubic_slerp(const Quaternion &p_b, const Quaternion &p_pr
ERR_FAIL_COND_V_MSG(!is_normalized(), Quaternion(), "The start quaternion must be normalized.");
ERR_FAIL_COND_V_MSG(!p_b.is_normalized(), Quaternion(), "The end quaternion must be normalized.");
#endif
- //the only way to do slerp :|
- real_t t2 = (1.0f - p_weight) * p_weight * 2;
- Quaternion sp = this->slerp(p_b, p_weight);
- Quaternion sq = p_pre_a.slerpni(p_post_b, p_weight);
- return sp.slerpni(sq, t2);
+ Quaternion ret_q = *this;
+ Quaternion pre_q = p_pre_a;
+ Quaternion to_q = p_b;
+ Quaternion post_q = p_post_b;
+
+ // Align flip phases.
+ ret_q = Basis(ret_q).get_rotation_quaternion();
+ pre_q = Basis(pre_q).get_rotation_quaternion();
+ to_q = Basis(to_q).get_rotation_quaternion();
+ post_q = Basis(post_q).get_rotation_quaternion();
+
+ // Flip quaternions to shortest path if necessary.
+ bool flip1 = signbit(ret_q.dot(pre_q));
+ pre_q = flip1 ? -pre_q : pre_q;
+ bool flip2 = signbit(ret_q.dot(to_q));
+ to_q = flip2 ? -to_q : to_q;
+ bool flip3 = flip2 ? to_q.dot(post_q) <= 0 : signbit(to_q.dot(post_q));
+ post_q = flip3 ? -post_q : post_q;
+
+ if (flip1 || flip2 || flip3) {
+ // Angle is too large, calc by Approximate.
+ ret_q.x = Math::cubic_interpolate(ret_q.x, to_q.x, pre_q.x, post_q.x, p_weight);
+ ret_q.y = Math::cubic_interpolate(ret_q.y, to_q.y, pre_q.y, post_q.y, p_weight);
+ ret_q.z = Math::cubic_interpolate(ret_q.z, to_q.z, pre_q.z, post_q.z, p_weight);
+ ret_q.w = Math::cubic_interpolate(ret_q.w, to_q.w, pre_q.w, post_q.w, p_weight);
+ ret_q.normalize();
+ } else {
+ // Calc by Expmap.
+ Quaternion ln_ret = ret_q.log();
+ Quaternion ln_to = to_q.log();
+ Quaternion ln_pre = pre_q.log();
+ Quaternion ln_post = post_q.log();
+ Quaternion ln = Quaternion(0, 0, 0, 0);
+ ln.x = Math::cubic_interpolate(ln_ret.x, ln_to.x, ln_pre.x, ln_post.x, p_weight);
+ ln.y = Math::cubic_interpolate(ln_ret.y, ln_to.y, ln_pre.y, ln_post.y, p_weight);
+ ln.z = Math::cubic_interpolate(ln_ret.z, ln_to.z, ln_pre.z, ln_post.z, p_weight);
+ ret_q = ln.exp();
+ }
+ return ret_q;
}
Quaternion::operator String() const {
@@ -213,7 +241,7 @@ Vector3 Quaternion::get_axis() const {
return Vector3(x * r, y * r, z * r);
}
-float Quaternion::get_angle() const {
+real_t Quaternion::get_angle() const {
return 2 * Math::acos(w);
}
diff --git a/core/math/quaternion.h b/core/math/quaternion.h
index 9801746659..684e7cb091 100644
--- a/core/math/quaternion.h
+++ b/core/math/quaternion.h
@@ -74,7 +74,7 @@ struct _NO_DISCARD_ Quaternion {
Quaternion cubic_slerp(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight) const;
Vector3 get_axis() const;
- float get_angle() const;
+ real_t get_angle() const;
_FORCE_INLINE_ void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
r_angle = 2 * Math::acos(w);
diff --git a/core/math/vector4.cpp b/core/math/vector4.cpp
index c2a6f8ead2..ed42d8bfb9 100644
--- a/core/math/vector4.cpp
+++ b/core/math/vector4.cpp
@@ -50,7 +50,7 @@ Vector4 Vector4::normalized() const {
}
bool Vector4::is_normalized() const {
- return Math::is_equal_approx(length_squared(), 1, (real_t)UNIT_EPSILON); //use less epsilon
+ return Math::is_equal_approx(length_squared(), 1, (real_t)UNIT_EPSILON); // Use less epsilon.
}
Vector4 Vector4::abs() const {
@@ -61,6 +61,26 @@ Vector4 Vector4::sign() const {
return Vector4(SIGN(x), SIGN(y), SIGN(z), SIGN(w));
}
+Vector4 Vector4::floor() const {
+ return Vector4(Math::floor(x), Math::floor(y), Math::floor(z), Math::floor(w));
+}
+
+Vector4 Vector4::ceil() const {
+ return Vector4(Math::ceil(x), Math::ceil(y), Math::ceil(z), Math::ceil(w));
+}
+
+Vector4 Vector4::round() const {
+ return Vector4(Math::round(x), Math::round(y), Math::round(z), Math::round(w));
+}
+
+Vector4 Vector4::lerp(const Vector4 &p_to, const real_t p_weight) const {
+ return Vector4(
+ x + (p_weight * (p_to.x - x)),
+ y + (p_weight * (p_to.y - y)),
+ z + (p_weight * (p_to.z - z)),
+ w + (p_weight * (p_to.w - w)));
+}
+
Vector4 Vector4::inverse() const {
return Vector4(1.0f / x, 1.0f / y, 1.0f / z, 1.0f / w);
}
diff --git a/core/math/vector4.h b/core/math/vector4.h
index 645c51db87..37ddb509d6 100644
--- a/core/math/vector4.h
+++ b/core/math/vector4.h
@@ -54,11 +54,13 @@ struct _NO_DISCARD_ Vector4 {
real_t components[4] = { 0, 0, 0, 0 };
};
- _FORCE_INLINE_ real_t &operator[](int idx) {
- return components[idx];
+ _FORCE_INLINE_ real_t &operator[](const int p_axis) {
+ DEV_ASSERT((unsigned int)p_axis < 4);
+ return components[p_axis];
}
- _FORCE_INLINE_ const real_t &operator[](int idx) const {
- return components[idx];
+ _FORCE_INLINE_ const real_t &operator[](const int p_axis) const {
+ DEV_ASSERT((unsigned int)p_axis < 4);
+ return components[p_axis];
}
_FORCE_INLINE_ real_t length_squared() const;
bool is_equal_approx(const Vector4 &p_vec4) const;
@@ -66,8 +68,13 @@ struct _NO_DISCARD_ Vector4 {
void normalize();
Vector4 normalized() const;
bool is_normalized() const;
+
Vector4 abs() const;
Vector4 sign() const;
+ Vector4 floor() const;
+ Vector4 ceil() const;
+ Vector4 round() const;
+ Vector4 lerp(const Vector4 &p_to, const real_t p_weight) const;
Vector4::Axis min_axis_index() const;
Vector4::Axis max_axis_index() const;
diff --git a/core/os/os.h b/core/os/os.h
index 0428f6df2a..b9f7328929 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -142,6 +142,8 @@ public:
virtual void set_low_processor_usage_mode_sleep_usec(int p_usec);
virtual int get_low_processor_usage_mode_sleep_usec() const;
+ virtual Vector<String> get_system_fonts() const { return Vector<String>(); };
+ virtual String get_system_font_path(const String &p_font_name, bool p_bold = false, bool p_italic = false) const { return String(); };
virtual String get_executable_path() const;
virtual Error execute(const String &p_path, const List<String> &p_arguments, String *r_pipe = nullptr, int *r_exitcode = nullptr, bool read_stderr = false, Mutex *p_pipe_mutex = nullptr, bool p_open_console = false) = 0;
virtual Error create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id = nullptr, bool p_open_console = false) = 0;
diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp
index 7518d81233..6b04c6e4e8 100644
--- a/core/variant/variant_call.cpp
+++ b/core/variant/variant_call.cpp
@@ -1731,8 +1731,12 @@ static void _register_variant_builtin_methods() {
bind_method(Vector4, max_axis_index, sarray(), varray());
bind_method(Vector4, length, sarray(), varray());
bind_method(Vector4, length_squared, sarray(), varray());
- bind_method(Vector4, sign, sarray(), varray());
bind_method(Vector4, abs, sarray(), varray());
+ bind_method(Vector4, sign, sarray(), varray());
+ bind_method(Vector4, floor, sarray(), varray());
+ bind_method(Vector4, ceil, sarray(), varray());
+ bind_method(Vector4, round, sarray(), varray());
+ bind_method(Vector4, lerp, sarray("to", "weight"), varray());
bind_method(Vector4, clamp, sarray("min", "max"), varray());
bind_method(Vector4, normalized, sarray(), varray());
bind_method(Vector4, is_normalized, sarray(), varray());
diff --git a/core/variant/variant_setget.cpp b/core/variant/variant_setget.cpp
index 92dbf45f2a..57b953f7f0 100644
--- a/core/variant/variant_setget.cpp
+++ b/core/variant/variant_setget.cpp
@@ -819,6 +819,8 @@ INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector2, double, real_t, 2)
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector2i, int64_t, int32_t, 2)
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector3, double, real_t, 3)
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector3i, int64_t, int32_t, 3)
+INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector4, double, real_t, 4)
+INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector4i, int64_t, int32_t, 4)
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Quaternion, double, real_t, 4)
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Color, double, float, 4)
@@ -883,6 +885,8 @@ void register_indexed_setters_getters() {
REGISTER_INDEXED_MEMBER(Vector2i);
REGISTER_INDEXED_MEMBER(Vector3);
REGISTER_INDEXED_MEMBER(Vector3i);
+ REGISTER_INDEXED_MEMBER(Vector4);
+ REGISTER_INDEXED_MEMBER(Vector4i);
REGISTER_INDEXED_MEMBER(Quaternion);
REGISTER_INDEXED_MEMBER(Color);
REGISTER_INDEXED_MEMBER(Transform2D);
diff --git a/doc/classes/Decal.xml b/doc/classes/Decal.xml
index 861b4b480c..b86104a5e3 100644
--- a/doc/classes/Decal.xml
+++ b/doc/classes/Decal.xml
@@ -63,14 +63,14 @@
<member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="1048575">
Specifies which [member VisualInstance3D.layers] this decal will project on. By default, Decals affect all layers. This is used so you can specify which types of objects receive the Decal and which do not. This is especially useful so you can ensure that dynamic objects don't accidentally receive a Decal intended for the terrain under them.
</member>
- <member name="distance_fade_begin" type="float" setter="set_distance_fade_begin" getter="get_distance_fade_begin" default="10.0">
- Distance from the camera at which the Decal begins to fade away.
+ <member name="distance_fade_begin" type="float" setter="set_distance_fade_begin" getter="get_distance_fade_begin" default="40.0">
+ The distance from the camera at which the Decal begins to fade away (in 3D units).
</member>
<member name="distance_fade_enabled" type="bool" setter="set_enable_distance_fade" getter="is_distance_fade_enabled" default="false">
- If [code]true[/code], decals will smoothly fade away when far from the active [Camera3D] starting at [member distance_fade_begin]. The Decal will fade out over [member distance_fade_length], after which it will be culled and not sent to the shader at all. Use this to reduce the number of active Decals in a scene and thus improve performance.
+ If [code]true[/code], decals will smoothly fade away when far from the active [Camera3D] starting at [member distance_fade_begin]. The Decal will fade out over [member distance_fade_begin] + [member distance_fade_length], after which it will be culled and not sent to the shader at all. Use this to reduce the number of active Decals in a scene and thus improve performance.
</member>
- <member name="distance_fade_length" type="float" setter="set_distance_fade_length" getter="get_distance_fade_length" default="1.0">
- Distance over which the Decal fades. The Decal becomes slowly more transparent over this distance and is completely invisible at the end.
+ <member name="distance_fade_length" type="float" setter="set_distance_fade_length" getter="get_distance_fade_length" default="10.0">
+ The distance over which the Decal fades (in 3D units). The Decal becomes slowly more transparent over this distance and is completely invisible at the end.
</member>
<member name="emission_energy" type="float" setter="set_emission_energy" getter="get_emission_energy" default="1.0">
Energy multiplier for the emission texture. This will make the decal emit light at a higher intensity.
diff --git a/doc/classes/EditorFeatureProfile.xml b/doc/classes/EditorFeatureProfile.xml
index 2ab87b0dd1..a6bdc294ac 100644
--- a/doc/classes/EditorFeatureProfile.xml
+++ b/doc/classes/EditorFeatureProfile.xml
@@ -57,7 +57,7 @@
<return type="int" enum="Error" />
<argument index="0" name="path" type="String" />
<description>
- Saves the editor feature profile to a file in JSON format. It can then be imported using the feature profile manager's [b]Import[/b] button or the [method load_from_file] button.
+ Saves the editor feature profile to a file in JSON format. It can then be imported using the feature profile manager's [b]Import[/b] button or the [method load_from_file] method.
</description>
</method>
<method name="set_disable_class">
diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml
index 6377c829e1..ec2776f636 100644
--- a/doc/classes/Font.xml
+++ b/doc/classes/Font.xml
@@ -14,8 +14,8 @@
<argument index="0" name="canvas_item" type="RID" />
<argument index="1" name="pos" type="Vector2" />
<argument index="2" name="char" type="int" />
- <argument index="3" name="modulate" type="int" />
- <argument index="4" name="arg4" type="Color" default="Color(1, 1, 1, 1)" />
+ <argument index="3" name="font_size" type="int" />
+ <argument index="4" name="modulate" type="Color" default="Color(1, 1, 1, 1)" />
<description>
Draw a single Unicode character [code]char[/code] into a canvas item using the font, at a given position, with [code]modulate[/code] color. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
[b]Note:[/b] Do not use this function to draw strings character by character, use [method draw_string] or [TextLine] instead.
@@ -26,9 +26,9 @@
<argument index="0" name="canvas_item" type="RID" />
<argument index="1" name="pos" type="Vector2" />
<argument index="2" name="char" type="int" />
- <argument index="3" name="size" type="int" />
- <argument index="4" name="modulate" type="int" default="-1" />
- <argument index="5" name="arg5" type="Color" default="Color(1, 1, 1, 1)" />
+ <argument index="3" name="font_size" type="int" />
+ <argument index="4" name="size" type="int" default="-1" />
+ <argument index="5" name="modulate" type="Color" default="Color(1, 1, 1, 1)" />
<description>
Draw a single Unicode character [code]char[/code] outline into a canvas item using the font, at a given position, with [code]modulate[/code] color and [code]size[/code] outline size. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
[b]Note:[/b] Do not use this function to draw strings character by character, use [method draw_string] or [TextLine] instead.
@@ -129,7 +129,7 @@
<method name="get_char_size" qualifiers="const">
<return type="Vector2" />
<argument index="0" name="char" type="int" />
- <argument index="1" name="arg1" type="int" />
+ <argument index="1" name="font_size" type="int" />
<description>
Returns the size of a character, optionally taking kerning into account if the next character is provided.
[b]Note:[/b] Do not use this function to calculate width of the string character by character, use [method get_string_size] or [TextLine] instead. The height returned is the font height (see also [method get_height]) and has no relation to the glyph height.
diff --git a/doc/classes/FontFile.xml b/doc/classes/FontFile.xml
index aaf871d55a..dc2cbdde63 100644
--- a/doc/classes/FontFile.xml
+++ b/doc/classes/FontFile.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="FontFile" inherits="Font" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- FontFile source data and prerendered glyph cache, imported from dynamic or bitmap font.
+ Font source data and prerendered glyph cache, imported from dynamic or bitmap font.
</brief_description>
<description>
[FontFile] contains a set of glyphs to represent Unicode characters imported from a font file, as well as a cache of rasterized glyphs, and a set of fallback [Font]s to use.
diff --git a/doc/classes/Geometry2D.xml b/doc/classes/Geometry2D.xml
index b84e221d1c..195c481187 100644
--- a/doc/classes/Geometry2D.xml
+++ b/doc/classes/Geometry2D.xml
@@ -126,7 +126,7 @@
<return type="Dictionary" />
<argument index="0" name="sizes" type="PackedVector2Array" />
<description>
- Given an array of [Vector2]s representing tiles, builds an atlas. The returned dictionary has two keys: [code]points[/code] is a vector of [Vector2] that specifies the positions of each tile, [code]size[/code] contains the overall size of the whole atlas as [Vector2].
+ Given an array of [Vector2]s representing tiles, builds an atlas. The returned dictionary has two keys: [code]points[/code] is an array of [Vector2] that specifies the positions of each tile, [code]size[/code] contains the overall size of the whole atlas as [Vector2].
</description>
</method>
<method name="merge_polygons">
diff --git a/doc/classes/Label3D.xml b/doc/classes/Label3D.xml
index 2c3c27079a..5ba0a2d79a 100644
--- a/doc/classes/Label3D.xml
+++ b/doc/classes/Label3D.xml
@@ -79,7 +79,7 @@
</member>
<member name="outline_render_priority" type="int" setter="set_outline_render_priority" getter="get_outline_render_priority" default="-1">
Sets the render priority for the text outline. Higher priority objects will be sorted in front of lower priority objects.
- [b]Node:[/b] This only applies if [member alpha_cut] is set to [constant ALPHA_CUT_DISABLED] (default value).
+ [b]Note:[/b] This only applies if [member alpha_cut] is set to [constant ALPHA_CUT_DISABLED] (default value).
[b]Note:[/b] This only applies to sorting of transparent objects. This will not impact how transparent objects are sorted relative to opaque objects. This is because opaque objects are not sorted, while transparent objects are sorted from back to front (subject to priority).
</member>
<member name="outline_size" type="int" setter="set_outline_size" getter="get_outline_size" default="0">
@@ -90,7 +90,7 @@
</member>
<member name="render_priority" type="int" setter="set_render_priority" getter="get_render_priority" default="0">
Sets the render priority for the text. Higher priority objects will be sorted in front of lower priority objects.
- [b]Node:[/b] This only applies if [member alpha_cut] is set to [constant ALPHA_CUT_DISABLED] (default value).
+ [b]Note:[/b] This only applies if [member alpha_cut] is set to [constant ALPHA_CUT_DISABLED] (default value).
[b]Note:[/b] This only applies to sorting of transparent objects. This will not impact how transparent objects are sorted relative to opaque objects. This is because opaque objects are not sorted, while transparent objects are sorted from back to front (subject to priority).
</member>
<member name="shaded" type="bool" setter="set_draw_flag" getter="get_draw_flag" default="false">
@@ -126,7 +126,7 @@
If set, lights in the environment affect the label.
</constant>
<constant name="FLAG_DOUBLE_SIDED" value="1" enum="DrawFlags">
- If set, text can be seen from the back as well. If not, the texture is invisible when looking at it from behind.
+ If set, text can be seen from the back as well. If not, the text is invisible when looking at it from behind.
</constant>
<constant name="FLAG_DISABLE_DEPTH_TEST" value="2" enum="DrawFlags">
Disables the depth test, so this object is drawn on top of all others. However, objects drawn after it in the draw order may cover it.
diff --git a/doc/classes/NavigationRegion2D.xml b/doc/classes/NavigationRegion2D.xml
index c48ca18e9e..75b6544827 100644
--- a/doc/classes/NavigationRegion2D.xml
+++ b/doc/classes/NavigationRegion2D.xml
@@ -8,7 +8,7 @@
Two regions can be connected to each other if they share a similar edge. You can set the minimum distance between two vertices required to connect two edges by using [method NavigationServer2D.map_set_edge_connection_margin].
[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting two regions. They must share a similar edge.
The pathfinding cost of entering this region from another region can be controlled with the [member enter_cost] value.
- [b]Note[/b]: This value is not added to the path cost when the start position is already inside this region.
+ [b]Note:[/b] This value is not added to the path cost when the start position is already inside this region.
The pathfinding cost of traveling distances inside this region can be controlled with the [member travel_cost] multiplier.
</description>
<tutorials>
diff --git a/doc/classes/NavigationRegion3D.xml b/doc/classes/NavigationRegion3D.xml
index 9f4feee072..f5824a24fd 100644
--- a/doc/classes/NavigationRegion3D.xml
+++ b/doc/classes/NavigationRegion3D.xml
@@ -8,7 +8,7 @@
Two regions can be connected to each other if they share a similar edge. You can set the minimum distance between two vertices required to connect two edges by using [method NavigationServer3D.map_set_edge_connection_margin].
[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting two regions. They must share a similar edge.
The cost of entering this region from another region can be controlled with the [member enter_cost] value.
- [b]Note[/b]: This value is not added to the path cost when the start position is already inside this region.
+ [b]Note:[/b] This value is not added to the path cost when the start position is already inside this region.
The cost of traveling distances inside this region can be controlled with the [member travel_cost] multiplier.
</description>
<tutorials>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index aaf08dec2f..5473347cb1 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -385,6 +385,23 @@
[b]Note:[/b] Shared storage is implemented on Android and allows to differentiate between app specific and shared directories. Shared directories have additional restrictions on Android.
</description>
</method>
+ <method name="get_system_font_path" qualifiers="const">
+ <return type="String" />
+ <argument index="0" name="font_name" type="String" />
+ <argument index="1" name="bold" type="bool" default="false" />
+ <argument index="2" name="italic" type="bool" default="false" />
+ <description>
+ Returns path to the system font file with [code]font_name[/code] and style. Return empty string if no matching fonts found.
+ [b]Note:[/b] This method is implemented on iOS, Linux, macOS and Windows.
+ </description>
+ </method>
+ <method name="get_system_fonts" qualifiers="const">
+ <return type="PackedStringArray" />
+ <description>
+ Returns list of font family names available.
+ [b]Note:[/b] This method is implemented on iOS, Linux, macOS and Windows.
+ </description>
+ </method>
<method name="get_thread_caller_id" qualifiers="const">
<return type="int" />
<description>
diff --git a/doc/classes/SkeletonProfile.xml b/doc/classes/SkeletonProfile.xml
index ca82993927..5c2d0eefb4 100644
--- a/doc/classes/SkeletonProfile.xml
+++ b/doc/classes/SkeletonProfile.xml
@@ -175,7 +175,7 @@
<signal name="profile_updated">
<description>
This signal is emitted when change the value in profile. This is used to update key name in the [BoneMap] and to redraw the [BoneMap] editor.
- [b]Note[/b]: This signal is not connected directly to editor to simplify the reference, instead it is passed on to editor through the [BoneMap].
+ [b]Note:[/b] This signal is not connected directly to editor to simplify the reference, instead it is passed on to editor through the [BoneMap].
</description>
</signal>
</signals>
diff --git a/doc/classes/SpriteBase3D.xml b/doc/classes/SpriteBase3D.xml
index 41b02b6dc9..bc381578d9 100644
--- a/doc/classes/SpriteBase3D.xml
+++ b/doc/classes/SpriteBase3D.xml
@@ -77,7 +77,7 @@
</member>
<member name="render_priority" type="int" setter="set_render_priority" getter="get_render_priority" default="0">
Sets the render priority for the sprite. Higher priority objects will be sorted in front of lower priority objects.
- [b]Node:[/b] This only applies if [member alpha_cut] is set to [constant ALPHA_CUT_DISABLED] (default value).
+ [b]Note:[/b] This only applies if [member alpha_cut] is set to [constant ALPHA_CUT_DISABLED] (default value).
[b]Note:[/b] This only applies to sorting of transparent objects. This will not impact how transparent objects are sorted relative to opaque objects. This is because opaque objects are not sorted, while transparent objects are sorted from back to front (subject to priority).
</member>
<member name="shaded" type="bool" setter="set_draw_flag" getter="get_draw_flag" default="false">
diff --git a/doc/classes/SystemFont.xml b/doc/classes/SystemFont.xml
new file mode 100644
index 0000000000..b1b78f1705
--- /dev/null
+++ b/doc/classes/SystemFont.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="SystemFont" inherits="Font" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
+ <brief_description>
+ Font loaded from a system font.
+ [b]Note:[/b] This class is implemented on iOS, Linux, macOS and Windows, on other platforms it will fallback to default theme font.
+ </brief_description>
+ <description>
+ [SystemFont] loads a font from a system font with the first matching name from [member font_names].
+ It will attempt to match font style, but it's not guaranteed.
+ The returned font might be part of a font collection or be a variable font with OpenType "weight" and/or "italic" features set.
+ You can create [FontVariation] of the system font for fine control over its features.
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="antialiased" type="bool" setter="set_antialiased" getter="is_antialiased" default="true">
+ If set to [code]true[/code], font 8-bit anitialiased glyph rendering is supported and enabled.
+ </member>
+ <member name="fallbacks" type="Font[]" setter="set_fallbacks" getter="get_fallbacks" default="[]">
+ Array of fallback [Font]s.
+ </member>
+ <member name="font_names" type="PackedStringArray" setter="set_font_names" getter="get_font_names" default="PackedStringArray()">
+ Array of font family names to search, first matching font found is used.
+ </member>
+ <member name="font_style" type="int" setter="set_font_style" getter="get_font_style" enum="TextServer.FontStyle" default="0">
+ Font style flags, see [enum TextServer.FontStyle].
+ </member>
+ <member name="force_autohinter" type="bool" setter="set_force_autohinter" getter="is_force_autohinter" default="false">
+ If set to [code]true[/code], auto-hinting is supported and preferred over font built-in hinting.
+ </member>
+ <member name="generate_mipmaps" type="bool" setter="set_generate_mipmaps" getter="get_generate_mipmaps" default="false">
+ If set to [code]true[/code], generate mipmaps for the font textures.
+ </member>
+ <member name="hinting" type="int" setter="set_hinting" getter="get_hinting" enum="TextServer.Hinting" default="1">
+ Font hinting mode.
+ </member>
+ <member name="oversampling" type="float" setter="set_oversampling" getter="get_oversampling" default="0.0">
+ Font oversampling factor, if set to [code]0.0[/code] global oversampling factor is used instead.
+ </member>
+ <member name="subpixel_positioning" type="int" setter="set_subpixel_positioning" getter="get_subpixel_positioning" enum="TextServer.SubpixelPositioning" default="1">
+ Font glyph sub-pixel positioning mode. Subpixel positioning provides shaper text and better kerning for smaller font sizes, at the cost of memory usage and font rasterization speed. Use [constant TextServer.SUBPIXEL_POSITIONING_AUTO] to automatically enable it based on the font size.
+ </member>
+ </members>
+</class>
diff --git a/doc/classes/Vector4.xml b/doc/classes/Vector4.xml
index e1175e57bd..4df3bbb80e 100644
--- a/doc/classes/Vector4.xml
+++ b/doc/classes/Vector4.xml
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="Vector4" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
+ Vector used for 4D math using floating point coordinates.
</brief_description>
<description>
+ 4-element structure that can be used to represent any quadruplet of numeric values.
+ It uses floating-point coordinates. See [Vector4i] for its integer counterpart.
+ [b]Note:[/b] In a boolean context, a Vector4 will evaluate to [code]false[/code] if it's equal to [code]Vector4(0, 0, 0, 0)[/code]. Otherwise, a Vector4 will always evaluate to [code]true[/code].
</description>
<tutorials>
</tutorials>
@@ -10,18 +14,21 @@
<constructor name="Vector4">
<return type="Vector4" />
<description>
+ Constructs a default-initialized [Vector4] with all components set to [code]0[/code].
</description>
</constructor>
<constructor name="Vector4">
<return type="Vector4" />
<argument index="0" name="from" type="Vector4" />
<description>
+ Constructs a [Vector4] as a copy of the given [Vector4].
</description>
</constructor>
<constructor name="Vector4">
<return type="Vector4" />
<argument index="0" name="from" type="Vector4i" />
<description>
+ Constructs a new [Vector4] from [Vector4i].
</description>
</constructor>
<constructor name="Vector4">
@@ -31,6 +38,7 @@
<argument index="2" name="z" type="float" />
<argument index="3" name="w" type="float" />
<description>
+ Returns a [Vector4] with the given components.
</description>
</constructor>
</constructors>
@@ -38,6 +46,13 @@
<method name="abs" qualifiers="const">
<return type="Vector4" />
<description>
+ Returns a new vector with all components in absolute values (i.e. positive).
+ </description>
+ </method>
+ <method name="ceil" qualifiers="const">
+ <return type="Vector4" />
+ <description>
+ Returns a new vector with all components rounded up (towards positive infinity).
</description>
</method>
<method name="clamp" qualifiers="const">
@@ -45,85 +60,127 @@
<argument index="0" name="min" type="Vector4" />
<argument index="1" name="max" type="Vector4" />
<description>
+ Returns a new vector with all components clamped between the components of [code]min[/code] and [code]max[/code], by running [method @GlobalScope.clamp] on each component.
</description>
</method>
<method name="dot" qualifiers="const">
<return type="float" />
<argument index="0" name="with" type="Vector4" />
<description>
+ Returns the dot product of this vector and [code]with[/code].
+ </description>
+ </method>
+ <method name="floor" qualifiers="const">
+ <return type="Vector4" />
+ <description>
+ Returns a new vector with all components rounded down (towards negative infinity).
</description>
</method>
<method name="inverse" qualifiers="const">
<return type="Vector4" />
<description>
+ Returns the inverse of the vector. This is the same as [code]Vector4(1.0 / v.x, 1.0 / v.y, 1.0 / v.z, 1.0 / v.w)[/code].
</description>
</method>
<method name="is_equal_approx" qualifiers="const">
<return type="bool" />
<argument index="0" name="with" type="Vector4" />
<description>
+ Returns [code]true[/code] if this vector and [code]v[/code] are approximately equal, by running [method @GlobalScope.is_equal_approx] on each component.
</description>
</method>
<method name="is_normalized" qualifiers="const">
<return type="bool" />
<description>
+ Returns [code]true[/code] if the vector is normalized, i.e. its length is equal to 1.
</description>
</method>
<method name="length" qualifiers="const">
<return type="float" />
<description>
+ Returns the length (magnitude) of this vector.
</description>
</method>
<method name="length_squared" qualifiers="const">
<return type="float" />
<description>
+ Returns the squared length (squared magnitude) of this vector. This method runs faster than [method length].
+ </description>
+ </method>
+ <method name="lerp" qualifiers="const">
+ <return type="Vector4" />
+ <argument index="0" name="to" type="Vector4" />
+ <argument index="1" name="weight" type="float" />
+ <description>
+ Returns the result of the linear interpolation between this vector and [code]to[/code] by amount [code]weight[/code]. [code]weight[/code] is on the range of [code]0.0[/code] to [code]1.0[/code], representing the amount of interpolation.
</description>
</method>
<method name="max_axis_index" qualifiers="const">
<return type="int" />
<description>
+ Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X].
</description>
</method>
<method name="min_axis_index" qualifiers="const">
<return type="int" />
<description>
+ Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_W].
</description>
</method>
<method name="normalized" qualifiers="const">
<return type="Vector4" />
<description>
+ Returns the vector scaled to unit length. Equivalent to [code]v / v.length()[/code].
+ </description>
+ </method>
+ <method name="round" qualifiers="const">
+ <return type="Vector4" />
+ <description>
+ Returns a new vector with all components rounded to the nearest integer, with halfway cases rounded away from zero.
</description>
</method>
<method name="sign" qualifiers="const">
<return type="Vector4" />
<description>
+ Returns a new vector with each component set to one or negative one, depending on the signs of the components, or zero if the component is zero, by calling [method @GlobalScope.sign] on each component.
</description>
</method>
</methods>
<members>
<member name="w" type="float" setter="" getter="" default="0.0">
+ The vector's W component. Also accessible by using the index position [code][3][/code].
</member>
<member name="x" type="float" setter="" getter="" default="0.0">
+ The vector's X component. Also accessible by using the index position [code][0][/code].
</member>
<member name="y" type="float" setter="" getter="" default="0.0">
+ The vector's Y component. Also accessible by using the index position [code][1][/code].
</member>
<member name="z" type="float" setter="" getter="" default="0.0">
+ The vector's Z component. Also accessible by using the index position [code][2][/code].
</member>
</members>
<constants>
<constant name="AXIS_X" value="0">
+ Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
</constant>
<constant name="AXIS_Y" value="1">
+ Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
</constant>
<constant name="AXIS_Z" value="2">
+ Enumerated value for the Z axis. Returned by [method max_axis_index] and [method min_axis_index].
</constant>
<constant name="AXIS_W" value="3">
+ Enumerated value for the W axis. Returned by [method max_axis_index] and [method min_axis_index].
</constant>
<constant name="ZERO" value="Vector4(0, 0, 0)">
+ Zero vector, a vector with all components set to [code]0[/code].
</constant>
<constant name="ONE" value="Vector4(1, 1, 1)">
+ One vector, a vector with all components set to [code]1[/code].
</constant>
<constant name="INF" value="Vector4(inf, inf, inf)">
+ Infinity vector, a vector with all components set to [constant @GDScript.INF].
</constant>
</constants>
<operators>
@@ -131,100 +188,144 @@
<return type="bool" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Vector4" />
<argument index="0" name="right" type="Projection" />
<description>
+ Inversely transforms (multiplies) the [Vector4] by the given [Projection] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector4" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Multiplies each component of the [Vector4] by the components of the given [Vector4].
+ [codeblock]
+ print(Vector4(10, 20, 30, 40) * Vector4(3, 4, 5, 6)) # Prints "(30, 80, 150, 240)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector4" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector4] by the given [float].
+ [codeblock]
+ print(Vector4(10, 20, 30, 40) * 2) # Prints "(20, 40, 60, 80)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector4" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector4] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector4" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Adds each component of the [Vector4] by the components of the given [Vector4].
+ [codeblock]
+ print(Vector4(10, 20, 30, 40) + Vector4(3, 4, 5, 6)) # Prints "(13, 24, 35, 46)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector4" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Subtracts each component of the [Vector4] by the components of the given [Vector4].
+ [codeblock]
+ print(Vector4(10, 20, 30, 40) - Vector4(3, 4, 5, 6)) # Prints "(7, 16, 25, 34)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector4" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Divides each component of the [Vector4] by the components of the given [Vector4].
+ [codeblock]
+ print(Vector4(10, 20, 30, 40) / Vector4(2, 5, 3, 4)) # Prints "(5, 4, 10, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector4" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector4] by the given [float].
+ [codeblock]
+ print(Vector4(10, 20, 30, 40) / 2 # Prints "(5, 10, 15, 20)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector4" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector4] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Compares two [Vector4] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, Z values of the two vectors, and then with the W values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Compares two [Vector4] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, Z values of the two vectors, and then with the W values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
<return type="bool" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Returns [code]true[/code] if the vectors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Compares two [Vector4] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, Z values of the two vectors, and then with the W values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector4" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], [code]v[1][/code] is equivalent to [code]v.y[/code], and [code]v[2][/code] is equivalent to [code]v.z[/code].
+ </description>
+ </operator>
+ <operator name="operator []">
+ <return type="float" />
+ <argument index="0" name="index" type="int" />
+ <description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], [code]v[1][/code] is equivalent to [code]v.y[/code], [code]v[2][/code] is equivalent to [code]v.z[/code], and [code]v[3][/code] is equivalent to [code]v.w[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector4" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector4" />
<description>
+ Returns the negative value of the [Vector4]. This is the same as writing [code]Vector4(-v.x, -v.y, -v.z, -v.w)[/code]. This operation flips the direction of the vector while keeping the same magnitude. With floats, the number zero can be either positive or negative.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector4i.xml b/doc/classes/Vector4i.xml
index c3114e20e2..3611b17757 100644
--- a/doc/classes/Vector4i.xml
+++ b/doc/classes/Vector4i.xml
@@ -194,6 +194,12 @@
<description>
</description>
</operator>
+ <operator name="operator []">
+ <return type="int" />
+ <argument index="0" name="index" type="int" />
+ <description>
+ </description>
+ </operator>
<operator name="operator unary+">
<return type="Vector4i" />
<description>
diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py
index 312dffc7ee..2aa4cb8ec1 100755
--- a/doc/tools/make_rst.py
+++ b/doc/tools/make_rst.py
@@ -10,6 +10,11 @@ import sys
import xml.etree.ElementTree as ET
from collections import OrderedDict
+# Import hardcoded version information from version.py
+root_directory = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../")
+sys.path.append(root_directory) # Include the root directory
+import version
+
# Uncomment to do type checks. I have it commented out so it works below Python 3.5
# from typing import List, Dict, TextIO, Tuple, Iterable, Optional, DefaultDict, Any, Union
@@ -587,12 +592,26 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
else:
f = open(os.path.join(output_dir, "class_" + class_name.lower() + ".rst"), "w", encoding="utf-8")
- # Warn contributors not to edit this file directly
+ # Remove the "Edit on Github" button from the online docs page.
f.write(":github_url: hide\n\n")
- f.write(".. Generated automatically by doc/tools/make_rst.py in Godot's source tree.\n")
- f.write(".. DO NOT EDIT THIS FILE, but the " + class_name + ".xml source instead.\n")
- f.write(".. The source is found in doc/classes or modules/<name>/doc_classes.\n\n")
+ # Warn contributors not to edit this file directly.
+ # Also provide links to the source files for reference.
+
+ git_branch = "master"
+ if hasattr(version, "docs") and version.docs != "latest":
+ git_branch = version.docs
+
+ source_xml_path = os.path.relpath(class_def.filepath, root_directory).replace("\\", "/")
+ source_github_url = "https://github.com/godotengine/godot/tree/{}/{}".format(git_branch, source_xml_path)
+ generator_github_url = "https://github.com/godotengine/godot/tree/{}/doc/tools/make_rst.py".format(git_branch)
+
+ f.write(".. DO NOT EDIT THIS FILE!!!\n")
+ f.write(".. Generated automatically from Godot engine sources.\n")
+ f.write(".. Generator: " + generator_github_url + ".\n")
+ f.write(".. XML source: " + source_github_url + ".\n\n")
+
+ # Document reference id and header.
f.write(".. _class_" + class_name + ":\n\n")
f.write(make_heading(class_name, "=", False))
@@ -907,7 +926,7 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
f.write(make_footer())
-def escape_rst(text, until_pos=-1): # type: (str) -> str
+def escape_rst(text, until_pos=-1): # type: (str, int) -> str
# Escape \ character, otherwise it ends up as an escape character in rst
pos = 0
while True:
@@ -1301,7 +1320,7 @@ def rstize_text(text, state): # type: (str, State) -> str
return text
-def format_table(f, data, remove_empty_columns=False): # type: (TextIO, Iterable[Tuple[str, ...]]) -> None
+def format_table(f, data, remove_empty_columns=False): # type: (TextIO, Iterable[Tuple[str, ...]], bool) -> None
if len(data) == 0:
return
diff --git a/doc/translations/ar.po b/doc/translations/ar.po
index a4488f3339..43e62ecab2 100644
--- a/doc/translations/ar.po
+++ b/doc/translations/ar.po
@@ -19,12 +19,14 @@
# Hamza Kalash <mogo.gogo170@gmail.com>, 2022.
# ywmaa <ywmaa.personal@gmail.com>, 2022.
# TabbyDev <Mandomody25@gmail.com>, 2022.
+# عبد الرحمن أبو سعدة ||Abd Alrahman abo saada <abdalrahmanabs2005@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-05-31 22:35+0000\n"
-"Last-Translator: TabbyDev <Mandomody25@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:56+0000\n"
+"Last-Translator: عبد الرحمن أبو سعدة ||Abd Alrahman abo saada "
+"<abdalrahmanabs2005@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ar/>\n"
"Language: ar\n"
@@ -33,7 +35,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 4.13-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -1004,7 +1006,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7850,8 +7859,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11922,7 +11931,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20347,7 +20361,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23739,7 +23753,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25576,7 +25590,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32679,7 +32693,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32695,7 +32709,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32725,7 +32739,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36859,7 +36873,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37122,7 +37136,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37240,6 +37254,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -37794,7 +37854,7 @@ msgstr ""
#: doc/classes/Node.xml
msgid "Nodes and Scenes"
-msgstr ""
+msgstr "العقد و المشاهد"
#: doc/classes/Node.xml
msgid "All Demos"
@@ -39937,7 +39997,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39949,7 +40015,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57735,7 +57802,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60636,8 +60703,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64269,13 +64336,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64287,13 +64355,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71202,7 +71271,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71287,6 +71360,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/ca.po b/doc/translations/ca.po
index bd84c415cc..2fce9a4d08 100644
--- a/doc/translations/ca.po
+++ b/doc/translations/ca.po
@@ -960,7 +960,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7797,8 +7804,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11866,7 +11873,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20277,7 +20289,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23666,7 +23678,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25497,7 +25509,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32593,7 +32605,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32609,7 +32621,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32639,7 +32651,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36739,7 +36751,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37000,7 +37012,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37114,6 +37126,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39811,7 +39869,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39823,7 +39887,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57577,7 +57642,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60468,8 +60533,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64092,13 +64157,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64110,13 +64176,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71002,7 +71069,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71087,6 +71158,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot
index 90ebdbf9f3..b8187d24d5 100644
--- a/doc/translations/classes.pot
+++ b/doc/translations/classes.pot
@@ -840,7 +840,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7677,8 +7684,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11746,7 +11753,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20157,7 +20169,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23543,7 +23555,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25374,7 +25386,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32470,7 +32482,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32486,7 +32498,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32516,7 +32528,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36616,7 +36628,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36877,7 +36889,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36991,6 +37003,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39688,7 +39746,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39700,7 +39764,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57454,7 +57519,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60345,8 +60410,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63969,13 +64034,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63987,13 +64053,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -65801,11 +65868,11 @@ msgstr ""
#: doc/classes/VehicleBody.xml
msgid ""
"Accelerates the vehicle by applying an engine force. The vehicle is only "
-"sped up if the wheels that have [member VehicleWheel.use_as_traction] set "
-"to [code]true[/code] and are in contact with a surface. The [member "
-"RigidBody.mass] of the vehicle has an effect on the acceleration of the "
-"vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 50 "
-"range for acceleration.\n"
+"sped up if the wheels that have [member VehicleWheel.use_as_traction] set to "
+"[code]true[/code] and are in contact with a surface. The [member RigidBody."
+"mass] of the vehicle has an effect on the acceleration of the vehicle. For a "
+"vehicle with a mass set to 1000, try a value in the 25 - 50 range for "
+"acceleration.\n"
"[b]Note:[/b] The simulation does not take the effect of gears into account, "
"you will need to add logic for this if you wish to simulate gears.\n"
"A negative value will result in the vehicle reversing."
@@ -65885,8 +65952,8 @@ msgstr ""
#: doc/classes/VehicleWheel.xml
msgid ""
-"Accelerates the wheel by applying an engine force. The wheel is only sped "
-"up if it is in contact with a surface. The [member RigidBody.mass] of the "
+"Accelerates the wheel by applying an engine force. The wheel is only sped up "
+"if it is in contact with a surface. The [member RigidBody.mass] of the "
"vehicle has an effect on the acceleration of the vehicle. For a vehicle with "
"a mass set to 1000, try a value in the 25 - 50 range for acceleration.\n"
"[b]Note:[/b] The simulation does not take the effect of gears into account, "
@@ -70879,7 +70946,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70964,6 +71035,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/cs.po b/doc/translations/cs.po
index 48a79d9ec3..878b7e9aae 100644
--- a/doc/translations/cs.po
+++ b/doc/translations/cs.po
@@ -1230,8 +1230,15 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "Jako [method print], ale tiskne pouze pokud je použita v debug módu."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8187,8 +8194,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12266,7 +12273,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20725,7 +20737,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24123,7 +24135,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25960,7 +25972,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -33074,7 +33086,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33090,7 +33102,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33121,7 +33133,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37264,7 +37276,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37527,7 +37539,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37645,6 +37657,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40345,7 +40403,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40357,7 +40421,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58166,7 +58231,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -61082,8 +61147,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64740,13 +64805,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64758,13 +64824,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71688,9 +71755,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "Vrátí [code] true [/code], pokud je vektor normalizován, jinak false."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -71774,6 +71844,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/de.po b/doc/translations/de.po
index ba4e24c02b..0cf8d9ae17 100644
--- a/doc/translations/de.po
+++ b/doc/translations/de.po
@@ -35,7 +35,7 @@
# spoadr <spoadr@gmx.ch>, 2021.
# Tim <tim14speckenwirth@gmail.com>, 2021.
# user <online141@gmx.de>, 2021.
-# Jummit <jummit@web.de>, 2021.
+# Jummit <jummit@web.de>, 2021, 2022.
# Bastian <bastian.ike@gmail.com>, 2021.
# KuhnChris <kuhnchris@kuhnchris.eu>, 2021.
# Rémi Verschelde <remi@godotengine.org>, 2021.
@@ -52,7 +52,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-06-22 23:17+0000\n"
+"PO-Revision-Date: 2022-07-23 03:56+0000\n"
"Last-Translator: Hans Peter <figefi6308@runqx.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/de/>\n"
@@ -61,7 +61,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -534,7 +534,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
"[Array] or [Dictionary] up to its deepest level.\n"
@@ -566,9 +565,9 @@ msgstr ""
"- Für [code]Array[/code]s, [code]==[/code] werden die Arrays elementweise "
"mit [code]==[/code] verglichen. Der Elemente-Vergleich ist also wieder "
"einfach, nicht tief.\n"
-"Zusammengefasst, immer wenn ein [code]Dictionary[/code] potentiell "
-"involviert ist, und du einen wahren Inhaltsvergleich brauchst, musst du "
-"[code]deep_equal[/code] verwenden."
+"Zusammengefasst, immer wenn möglicherweise ein [code]Dictionary[/code] "
+"involviert ist und du einen echten Inhaltsvergleich brauchst, verwende "
+"[code]deep_equal[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -969,7 +968,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Linearly interpolates between two values by the factor defined in "
"[code]weight[/code]. To perform interpolation, [code]weight[/code] should be "
@@ -989,17 +987,24 @@ msgid ""
"To perform eased interpolation with [method lerp], combine it with [method "
"ease] or [method smoothstep]."
msgstr ""
-"Interpoliert einen normalisierten Wert linear zwischen zwei Grenzwerten. "
-"Dies entspricht der Umkehrfunktion von [method inverse_lerp].\n"
-"Wenn die [code]from[/code] und [code]to[/code] Argumente vom Typ [int] oder "
-"[float] sind, dann ist der Rückgabewert ein [float].\n"
-"Sind beide Argumente vom gleichen Typ ([Vector2], [Vector3] oder [Color]), "
-"dann ist der Rückgabewert auch von diesem Typ ([code]lerp[/code] ruft dann "
-"die Methode [code]lerp[/code] dieses Vektortyps auf).\n"
+"Interpoliert linear zwischen zwei Werten mit dem in [code]weight[/code] "
+"definierten Faktor. Um eine Interpolation durchzuführen, sollte "
+"[code]Gewicht[/code] zwischen [code]0.0[/code] und [code]1.0[/code] "
+"(einschließlich) liegen. Werte außerhalb dieses Bereichs sind jedoch "
+"zulässig und können verwendet werden, um [i]Extrapolation[/i] "
+"durchzuführen.\n"
+"Wenn die Argumente [code]von[/code] und [code]bis[/code] vom Typ [int] oder "
+"[float] sind, ist der Rückgabewert ein [float].\n"
+"Wenn beide vom gleichen Vektortyp sind ([Vector2], [Vector3] oder [Color]), "
+"ist der Rückgabewert vom gleichen Typ ([code]lerp[/code] ruft dann die "
+"Methode [code]linear_interpolate[/code] des Vektortyps auf).\n"
"[codeblock]\n"
-"lerp(0, 4, 0.75) # Returns 3.0\n"
-"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
-"[/codeblock]"
+"lerp(0, 4, 0.75) # Gibt 3.0 zurück\n"
+"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Liefert Vector2(2, 3.5)\n"
+"[/codeblock]\n"
+"Siehe auch [method inverse_lerp], die die Umkehrung dieser Operation "
+"durchführt. Um eine Interpolation mit [method lerp] durchzuführen, "
+"kombiniere sie mit [method ease] oder [method smoothstep]."
#: modules/gdscript/doc_classes/@GDScript.xml
#, fuzzy
@@ -1398,9 +1403,22 @@ msgstr ""
"Trace aus."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Funktioniert wie [method print], gibt jedoch nur im Debug Modues Text aus."
+"Gibt einen Stacktrace zum Quelltextort aus, funktioniert nur wenn das "
+"\"Ausführen mit Debugger\" aktiviert ist.\n"
+"Die Ausgabe in der Konsole würde ungefähr so aussehen:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1660,6 +1678,45 @@ msgid ""
"3\n"
"[/codeblock]"
msgstr ""
+"Gibt ein Array mit dem angegebenen Bereich zurück. Die [Methode range] kann "
+"auf drei Arten aufgerufen werden:\n"
+"[code]range(n: int)[/code]: Beginnt bei 0, erhöht sich in Schritten von 1 "
+"und endet [i]vor[/i] [code]n[/code]. Das Argument [code]n[/code] ist "
+"[b]exklusiv[/b].\n"
+"[code]range(b: int, n: int)[/code]: Beginnt bei [code]b[/code], erhöht sich "
+"in Schritten von 1 und endet [i]vor[/i] [code]n[/code]. Die Argumente "
+"[code]b[/code] und [code]n[/code] sind [b]inklusive[/b] bzw. [b]exklusive[/"
+"b].\n"
+"[code]bereich(b: int, n: int, s: int)[/code]: Beginnt bei [code]b[/code], "
+"erhöht/verringert sich um Schritte von [code]s[/code] und endet [i]vor[/i] "
+"[code]n[/code]. Die Argumente [code]b[/code] und [code]n[/code] sind "
+"[b]inklusive[/b] bzw. [b]exklusive[/b]. Das Argument [code]s[/code] [b]kann[/"
+"b] negativ sein, aber nicht [code]0[/code]. Wenn [code]s[/code] [code]0[/"
+"code] ist, wird eine Fehlermeldung ausgegeben.\n"
+"Der [Methodenbereich] wandelt alle Argumente vor der Verarbeitung in [int] "
+"um.\n"
+"[b]Hinweis:[/b] Gibt ein leeres Array zurück, wenn kein Wert die "
+"Werteinschränkung erfüllt (z. B. [code]range(2, 5, -1)[/code] oder "
+"[code]range(5, 5, 1)[/code]).\n"
+"Beispiele:\n"
+"[codeblock]\n"
+"print(bereich(4)) # Gibt [0, 1, 2, 3] aus\n"
+"print(bereich(2, 5)) # Gibt [2, 3, 4] aus\n"
+"print(range(0, 6, 2)) # Gibt [0, 2, 4] aus\n"
+"print(range(4, 1, -1)) # Gibt [4, 3, 2] aus\n"
+"[/codeblock]\n"
+"Um rückwärts über ein [Array] zu iterieren, benutze:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"for i in range(array.size(), 0, -1):\n"
+" print(array[i - 1])\n"
+"[/codeblock]\n"
+"Ausgabe:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -2194,6 +2251,50 @@ msgid ""
"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
"\"idle_frame\")[/code] from the above example."
msgstr ""
+"Stoppt die Ausführung der Funktion und gibt den aktuellen angehaltenen "
+"Zustand an die aufrufende Funktion zurück.\n"
+"Rufe vom Aufrufer [Methode GDScriptFunctionState.resume] von dem Zustand "
+"auf, um die Ausführung wieder aufzunehmen. Dadurch wird der Zustand "
+"ungültig. Innerhalb der wiederaufgenommenen Funktion gibt [code]yield()[/"
+"code] das zurück, was an den Funktionsaufruf [code]resume()[/code] übergeben "
+"wurde.\n"
+"Wenn ein Objekt und ein Signal übergeben werden, wird die Ausführung "
+"fortgesetzt, wenn das Objekt das angegebene Signal aussendet. In diesem Fall "
+"gibt [code]yield()[/code] das an [code]emit_signal()[/code] übergebene "
+"Argument zurück, wenn das Signal nur ein Argument benötigt, oder ein Array "
+"mit allen an [code]emit_signal()[/code] übergebenen Argumenten, wenn das "
+"Signal mehrere Argumente benötigt.\n"
+"[code]yield[/code] kann auch verwendet werden um auf das Ende einer Funktion "
+"zu warten:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # Warten auf die Beendigung der "
+"Funktion countdown()\n"
+" print('Fertig')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # gibt ein GDScriptFunctionState "
+"Objekt an _ready() zurück\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# gibt aus:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# bereit\n"
+"[/codeblock]\n"
+"Beim Yielding einer Funktion wird das Signal [code]completed[/code] "
+"automatisch ausgegeben, wenn die Funktion zurückkehrt. Es kann daher als "
+"[code]signal[/code] Parameter der [code]yield[/code] Methode verwendet "
+"werden, um fortzufahren.\n"
+"Um eine Funktion zu beenden, sollte die resultierende Funktion auch einen "
+"[code]GDScriptFunctionState[/code] zurückgeben. Beachte "
+"[code]yield(get_tree(), \"idle_frame\")[/code] aus dem obigen Beispiel."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -3946,6 +4047,8 @@ msgid ""
"MIDI aftertouch message. This message is most often sent by pressing down on "
"the key after it \"bottoms out\"."
msgstr ""
+"MIDI-Aftertouch-Meldung. Diese Meldung wird meistens durch Drücken der Taste "
+"nachdem sie den Tiefpunkt erreicht hat gesendet."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -3961,6 +4064,8 @@ msgid ""
"MIDI program change message. This message sent when the program patch number "
"changes."
msgstr ""
+"MIDI-Programmwechselmeldung. Diese Meldung wird gesendet, wenn sich die "
+"Programm-Patch-Nummer ändert."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -3968,12 +4073,18 @@ msgid ""
"down on the key after it \"bottoms out\". This message is different from "
"polyphonic after-touch as it indicates the highest pressure across all keys."
msgstr ""
+"MIDI-Kanal-Druckmeldung. Diese Meldung wird meistens durch Drücken der Taste "
+"nachdem sie den Tiefpunkt erreicht hat gesendet.Diese Meldung unterscheidet "
+"sich von der polyphonen Aftertouch-Meldung, da sie den höchsten Druck über "
+"alle Tasten hinweg anzeigt."
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI pitch bend message. This message is sent to indicate a change in the "
"pitch bender (wheel or lever, typically)."
msgstr ""
+"MIDI-Pitch-Bend-Meldung. Diese Meldung wird gesendet, um eine Änderung des "
+"Pitch-Benders (typischerweise Rad oder Hebel) anzuzeigen."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -9731,8 +9842,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -13833,7 +13944,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -22443,7 +22559,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -25861,7 +25977,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -27703,7 +27819,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -31788,7 +31904,7 @@ msgstr ""
#: doc/classes/Input.xml
msgid "A singleton that deals with inputs."
-msgstr ""
+msgstr "Ein Singleton, der sich mit Inputs befasst."
#: doc/classes/Input.xml
msgid ""
@@ -31797,6 +31913,11 @@ msgid ""
"set in the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b], or "
"with the [InputMap] class."
msgstr ""
+"Ein Singleton, das sich mit Inputs befasst. Dazu gehören Tastendrucke, "
+"Maustasten und -bewegungen, Joypads und Eingabeaktionen. Aktionen und ihre "
+"Ereignisse können auf der Registerkarte [b]Eingabe-Zuordnung[/b] unter "
+"[b]Projekt > Projekteinstellungen[/b] oder mit der Klasse [InputMap] "
+"festgelegt werden."
#: doc/classes/Input.xml
msgid "Inputs tutorial index"
@@ -32028,6 +32149,20 @@ msgid ""
"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
+"Gibt [code]true[/code] aus, wenn Sie das Aktionsereignis drücken. Beachten "
+"Sie, dass, wenn einer Aktion mehrere Tasten zugewiesen sind und mehr als "
+"eine von ihnen gedrückt wird, das Loslassen einer Taste die Aktion auslöst, "
+"selbst wenn eine andere Taste, die dieser Aktion zugewiesen ist, noch "
+"gedrückt ist.\n"
+"Wenn [code]exact[/code] [code] false[/code] ist, werden zusätzliche "
+"Eingabemodifikatoren für die Ereignisse [InputEventKey] und "
+"[InputEventMouseButton] sowie die Richtung für die Ereignisse "
+"[InputEventJoypadMotion] ignoriert.\n"
+"[b]Hinweis:[/b] Aufgrund von Tastatur-Ghosting kann [method "
+"is_action_pressed] [code]false[/code] zurückgeben, auch wenn eine der Tasten "
+"der Aktion gedrückt ist. Siehe [url=$DOCS_URL/tutorials/inputs/"
+"input_examples.html#keyboard-events]Eingabebeispiele[/url] in der "
+"Dokumentation für weitere Informationen."
#: doc/classes/Input.xml
#, fuzzy
@@ -34911,7 +35046,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -34927,7 +35062,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -34963,7 +35098,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -39140,7 +39275,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -39407,7 +39542,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -39528,6 +39663,53 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid "Set the max packet size that this peer can handle."
+msgstr "Gibt das AnimationNode mit dem gegebenen Namen zurück."
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -42231,7 +42413,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -42243,7 +42431,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -60237,7 +60426,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -63197,8 +63386,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -66895,13 +67084,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -66913,13 +67103,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -74065,9 +74256,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "Wenn [code]true[/code], wird die Textur zentriert."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -74151,6 +74345,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/el.po b/doc/translations/el.po
index c7236b41df..87eee32604 100644
--- a/doc/translations/el.po
+++ b/doc/translations/el.po
@@ -855,7 +855,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7694,8 +7701,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11766,7 +11773,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20192,7 +20204,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23584,7 +23596,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25421,7 +25433,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32524,7 +32536,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32540,7 +32552,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32570,7 +32582,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36698,7 +36710,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36961,7 +36973,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37079,6 +37091,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39776,7 +39834,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39788,7 +39852,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57561,7 +57626,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60462,8 +60527,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64095,13 +64160,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64113,13 +64179,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71028,7 +71095,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71113,6 +71184,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/es.po b/doc/translations/es.po
index 50425a97d9..f9d008c41a 100644
--- a/doc/translations/es.po
+++ b/doc/translations/es.po
@@ -1380,9 +1380,22 @@ msgstr ""
"mientras muestra un trazo de cuando un error o advertencia se muestra."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Como [method print], pero imprime sólo cuando se usa en modo de depuración."
+"Imprime una registro de la pila en la ubicación del código, sólo funciona "
+"cuando se ejecuta con el depurador activado.\n"
+"La salida en la consola se vería algo así:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -10108,8 +10121,8 @@ msgstr ""
#, fuzzy
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -15375,10 +15388,13 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
-"Si [code]true[/code], el ancestro [Viewport] está actualmente usando esta "
-"cámara."
#: doc/classes/Camera.xml
msgid ""
@@ -26618,10 +26634,11 @@ msgstr ""
"save_to_file]."
#: doc/classes/EditorFeatureProfile.xml
+#, fuzzy
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
"Guarda el perfil de características del editor en un archivo en formato "
"JSON. Luego puede ser importado usando el botón [b]Import[/b] del "
@@ -31150,9 +31167,10 @@ msgid "The default exposure used for tonemapping."
msgstr "La exposición predeterminada que se utiliza para el mapeo de tonos."
#: doc/classes/Environment.xml
+#, fuzzy
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
"El modo de mapeo de tonos a utilizar. El \"tonemapping\" es el proceso que "
@@ -33579,9 +33597,10 @@ msgstr ""
"puntos finales."
#: doc/classes/Geometry.xml
+#, fuzzy
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -43052,7 +43071,7 @@ msgstr "La altura del cilindro."
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -43078,7 +43097,7 @@ msgstr "El tamaño del ancho de un píxel en el sprite para escalarlo en 3D."
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -43125,7 +43144,7 @@ msgstr "Si se ajusta, las luces del entorno afectan al sprite."
#: doc/classes/Label3D.xml
#, fuzzy
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
"Si se fija, la textura puede ser vista desde atrás también, si no, es "
@@ -48253,7 +48272,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -48576,7 +48595,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -48702,6 +48721,54 @@ msgstr ""
msgid "Control activation of this server."
msgstr "Traducción local de este nodo."
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr "Devuelve el estado actual de la conexión. Ver [enum ConnectionStatus]."
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid "Set the max packet size that this peer can handle."
+msgstr "Establece la piel que se utilizará en esta instancia."
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -52624,8 +52691,14 @@ msgid "See [enum ShadowDetail]."
msgstr "Ver [enum ShadowMode]."
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
-msgstr "Ver [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
+msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
@@ -52636,9 +52709,11 @@ msgstr ""
"que [constant SHADOW_CUBE], pero de menor calidad."
#: doc/classes/OmniLight.xml
+#, fuzzy
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
"Las sombras se representan en un mapa de cubos. Más lento que [constant "
"SHADOW_DUAL_PARABOLOID], pero de mayor calidad."
@@ -75508,7 +75583,7 @@ msgstr "El tamaño del ancho de un píxel en el sprite para escalarlo en 3D."
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -79211,8 +79286,8 @@ msgstr "Establece el texto para una línea específica."
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -83834,15 +83909,18 @@ msgstr ""
"elementos pueden establecerse utilizando [method set_item_metadata]."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
"Devuelve el siguiente TreeItem del árbol o un objeto nulo si no hay ninguno."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -83858,15 +83936,18 @@ msgid "Returns the parent TreeItem or a null object if there is none."
msgstr "Devuelve el TreeItem padre o un objeto nulo si no hay ninguno."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
"Devuelve el TreeItem anterior del árbol o un objeto nulo si no hay ninguno."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -93040,9 +93121,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr "Establece la matriz de transformación global del Viewport."
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "Si [code]true[/code], el canvas del viewport no se renderiza."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -93150,6 +93234,15 @@ msgstr ""
"ViewportUpdateMode] para las opciones."
#: doc/classes/VisualServer.xml
+msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
#, fuzzy
msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
diff --git a/doc/translations/fa.po b/doc/translations/fa.po
index 5f170b2b28..7416d80072 100644
--- a/doc/translations/fa.po
+++ b/doc/translations/fa.po
@@ -1269,8 +1269,15 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "شبیه متد چاپ، اما چاپ کردن تنها در حالت اشکال زدایی Ø§Ø³ØªÙØ§Ø¯Ù‡ میشود."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8118,8 +8125,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12187,7 +12194,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20598,7 +20610,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23987,7 +23999,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25818,7 +25830,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32914,7 +32926,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32930,7 +32942,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32960,7 +32972,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37066,7 +37078,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37327,7 +37339,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37441,6 +37453,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40138,7 +40196,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40150,7 +40214,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57920,7 +57985,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60811,8 +60876,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64435,13 +64500,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64453,13 +64519,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71345,7 +71412,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71430,6 +71501,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/fi.po b/doc/translations/fi.po
index 0ab098fd33..b1d940aa14 100644
--- a/doc/translations/fi.po
+++ b/doc/translations/fi.po
@@ -922,7 +922,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7767,8 +7774,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11840,7 +11847,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20268,7 +20280,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23660,7 +23672,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25497,7 +25509,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32607,7 +32619,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32623,7 +32635,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32653,7 +32665,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36783,7 +36795,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37046,7 +37058,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37164,6 +37176,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39861,7 +39919,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39873,7 +39937,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57648,7 +57713,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60550,8 +60615,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64185,13 +64250,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64203,13 +64269,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71123,7 +71190,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71208,6 +71279,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/fil.po b/doc/translations/fil.po
index 2dabe612e9..42ab5537f4 100644
--- a/doc/translations/fil.po
+++ b/doc/translations/fil.po
@@ -856,7 +856,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7693,8 +7700,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11762,7 +11769,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20173,7 +20185,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23562,7 +23574,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25393,7 +25405,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32489,7 +32501,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32505,7 +32517,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32535,7 +32547,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36635,7 +36647,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36896,7 +36908,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37010,6 +37022,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39707,7 +39765,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39719,7 +39783,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57473,7 +57538,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60364,8 +60429,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63988,13 +64053,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64006,13 +64072,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70898,7 +70965,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70983,6 +71054,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/fr.po b/doc/translations/fr.po
index 9d5c5f4a01..2866dc9b70 100644
--- a/doc/translations/fr.po
+++ b/doc/translations/fr.po
@@ -61,7 +61,7 @@ msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-18 08:12+0000\n"
+"PO-Revision-Date: 2022-07-27 05:24+0000\n"
"Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fr/>\n"
@@ -1423,9 +1423,22 @@ msgstr ""
"ou un avertissement est affiché."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Comme [method print], mais ne s'affiche que lorsqu'utilisé en mode débogage."
+"Affiche la trace d'appels à l'emplacement du code, ne fonctionne que lorsque "
+"le débogueur est activé.\n"
+"La sortie dans la console ressemblerait à ceci :\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -10371,10 +10384,11 @@ msgstr ""
"identifiant inférieur est éteint."
#: doc/classes/ARVRController.xml
+#, fuzzy
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -15718,9 +15732,13 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
-"Si [code]true[/code], l’ancêtre [Viewport] utilise actuellement cette caméra."
#: doc/classes/Camera.xml
msgid ""
@@ -27361,10 +27379,11 @@ msgstr ""
"[method save_to_file]."
#: doc/classes/EditorFeatureProfile.xml
+#, fuzzy
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
"Enregistre le profil de fonctionnalité de l'éditeur dans un fichier au "
"format JSON. Il peut ensuite être importé en utilisant le bouton [b]Import[/"
@@ -31942,7 +31961,7 @@ msgstr "L’exposition par défaut utilisée pour tonifier."
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -34020,9 +34039,10 @@ msgstr ""
"fin."
#: doc/classes/Geometry.xml
+#, fuzzy
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -42492,6 +42512,8 @@ msgid ""
"Controls the text's horizontal alignment. Supports left, center, right. Set "
"it to one of the [enum Align] constants."
msgstr ""
+"Control l'alignement horizontal du texte. Supporte à gauche, au centre, ou à "
+"droite. Réglez-le à l'une des constantes de [enum Align]."
#: doc/classes/Label3D.xml
#, fuzzy
@@ -42509,6 +42531,8 @@ msgid ""
"If [code]true[/code], depth testing is disabled and the object will be drawn "
"in render order."
msgstr ""
+"Si [code]true[/code], les tests de profondeur sont désactivés et l'objet "
+"sera dessiné suivant son ordre de rendu et non suivant sa distance."
#: doc/classes/Label3D.xml
#, fuzzy
@@ -42521,16 +42545,26 @@ msgid "The tint of [Font]'s outline."
msgstr "La hauteur du cylindre."
#: doc/classes/Label3D.xml
+#, fuzzy
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
"This is because opaque objects are not sorted, while transparent objects are "
"sorted from back to front (subject to priority)."
msgstr ""
+"Définit la priorité de rendu pour la bordure du texte. Des objets plus "
+"prioritaires seront affichés par-dessus des objets moins inférieurs.\n"
+"[b]Note: [/b] Cela ne s'applique que si [member alpha_cut] est défini à "
+"[constant ALPHA_CUT_DISABLED] (c'est la valeur par défaut).\n"
+"[b]Note :[/b] Cela ne s'applique qu'au tri des objets transparents. Cela "
+"n'affectera pas la façon dont les objets transparents sont triés par rapport "
+"aux objets opaques. C'est parce que les objets opaques ne sont pas triés, "
+"alors que les objets transparents sont triés de l'arrière à l'avant (et "
+"suivant leur priorité)."
#: doc/classes/Label3D.xml
#, fuzzy
@@ -42538,16 +42572,26 @@ msgid "The size of one pixel's width on the label to scale it in 3D."
msgstr "La taille d'un des pixels de la sprite pour définir sa taille en 3D."
#: doc/classes/Label3D.xml
+#, fuzzy
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
"This is because opaque objects are not sorted, while transparent objects are "
"sorted from back to front (subject to priority)."
msgstr ""
+"Définit la priorité de rendu pour le texte. Des objets plus prioritaires "
+"seront affichés par-dessus des objets moins inférieurs.\n"
+"[b]Note: [/b] Cela ne s'applique que si [member alpha_cut] est défini à "
+"[constant ALPHA_CUT_DISABLED] (c'est la valeur par défaut).\n"
+"[b]Note :[/b] Cela ne s'applique qu'au tri des objets transparents. Cela "
+"n'affectera pas la façon dont les objets transparents sont triés par rapport "
+"aux objets opaques. C'est parce que les objets opaques ne sont pas triés, "
+"alors que les objets transparents sont triés de l'arrière à l'avant (et "
+"suivant leur priorité)."
#: doc/classes/Label3D.xml
#, fuzzy
@@ -42561,10 +42605,14 @@ msgid ""
"Controls the text's vertical alignment. Supports top, center, bottom. Set it "
"to one of the [enum VAlign] constants."
msgstr ""
+"Control l'alignement vertical du texte. Supports en haut, au centre, et en "
+"bas. Réglez-le à l'une des constantes de [enum VAlign]."
#: doc/classes/Label3D.xml
msgid "Text width (in pixels), used for autowrap and fill alignment."
msgstr ""
+"La largeur de texte (en pixels), utilisée pour les retours à la ligne et "
+"l'alignement de remplissage."
#: doc/classes/Label3D.xml
#, fuzzy
@@ -42572,10 +42620,13 @@ msgid "If set, lights in the environment affect the label."
msgstr "Si [code]true[/code], ce [HTTPClient] a une réponse disponible."
#: doc/classes/Label3D.xml
+#, fuzzy
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
+"Si défini, le texte sera aussi visible de derrière. Sinon, le texture n'est "
+"invisible que de face."
#: doc/classes/Label3D.xml doc/classes/SpatialMaterial.xml
#: doc/classes/SpriteBase3D.xml
@@ -42583,11 +42634,16 @@ msgid ""
"Disables the depth test, so this object is drawn on top of all others. "
"However, objects drawn after it in the draw order may cover it."
msgstr ""
+"Désactive le test de profondeur, de sorte que cet objet sera dessiné devant "
+"tous les autres. Cependant, les objets dessinés après lui dans l'ordre "
+"d'affichage peuvent être devant."
#: doc/classes/Label3D.xml
msgid ""
"Label is scaled by depth so that it always appears the same size on screen."
msgstr ""
+"L'étiquette est mise à l'échelle suivant la distance pour qu'elle apparaisse "
+"toujours à la même taille à l'écran."
#: doc/classes/Label3D.xml doc/classes/SpriteBase3D.xml
msgid "Represents the size of the [enum DrawFlags] enum."
@@ -42599,6 +42655,9 @@ msgid ""
"areas, but transparency sorting issues may be visible when multiple "
"transparent materials are overlapping."
msgstr ""
+"Ce mode réalise un mélange l'opacité standard. Il peut afficher des zones "
+"translucides, mais des problèmes de tri selon la transparence peuvent être "
+"visibles lorsque plusieurs matériaux transparents se chevauchent."
#: doc/classes/Label3D.xml
msgid ""
@@ -42610,6 +42669,15 @@ msgid ""
"scripts), this mode might have transparency sorting issues between the main "
"text and the outline."
msgstr ""
+"Ce mode ne permet que les pixels transparents ou alors entièrement opaques. "
+"Ce mode est également connu sous le nom de [i]alpha testing[/i] ou "
+"[i]transparence 1 bit[/i].\n"
+"[b]Note :[/b] Ce mode peut avoir des problèmes avec des polices avec "
+"anticrénelage et des contours, essayez d'ajuster [member "
+"alpha_scisor_threshold] ou en utilisant la police avec SDF.\n"
+"[b]Note :[/b] Lors de l'utilisation de texte avec des caractères superposés "
+"(par exemple des cursives), ce mode pourrait avoir des problèmes de tri de "
+"la transparence entre le texte principal et le contour."
#: doc/classes/Label3D.xml
msgid ""
@@ -42621,6 +42689,13 @@ msgid ""
"scripts), this mode might have transparency sorting issues between the main "
"text and the outline."
msgstr ""
+"Ce mode dessine des pixels entièrement opaques lors de la pré-passe de "
+"profondeur. Ceci est plus lent que [constant ALPHA_CUT_DISABLED] ou "
+"[constant ALPHA_CUT_DISCARD], mais ça permet d'afficher des zones "
+"translucides et des bords lisses tout en utilisant le tri approprié.\n"
+"[b]Note :[/b] Lors de l'utilisation de texte avec des caractères superposés "
+"(par exemple des cursives), ce mode pourrait avoir des problèmes de tri de "
+"la transparence entre le texte principal et le contour."
#: doc/classes/LargeTexture.xml
msgid ""
@@ -42637,6 +42712,10 @@ msgid ""
"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
"different offsets."
msgstr ""
+"[i]Obsolète (elle sera retiré dans Godot 4.0).[/i] Une [Texture] capable de "
+"stocker de nombreuses textures plus petites avec des décalages.\n"
+"Vous pouvez ajouter dynamiquement des [Texture] à ce [LargeTexture] en "
+"utilisant différents décalages."
#: doc/classes/LargeTexture.xml
msgid ""
@@ -42694,6 +42773,11 @@ msgid ""
"from it. Light contains the common variables and parameters used for "
"lighting."
msgstr ""
+"Light est la classe de base [i]abstraite[/i] pour les lumières. Puisque ça "
+"ne peut être instancié, ça ne devrait pas être utilisé directement. D'autres "
+"types de nœuds de lumière héritent de cette classe, qui contient les "
+"variables communes aux sous-classes, et les paramètres utilisés pour "
+"l'éclairage."
#: doc/classes/Light.xml doc/classes/SpotLight.xml
msgid "3D lights and shadows"
@@ -42712,6 +42796,8 @@ msgid ""
"If [code]true[/code], the light only appears in the editor and will not be "
"visible at runtime."
msgstr ""
+"Si [code]true[/code], la lumière n'apparaît que dans l'éditeur et ne sera "
+"pas visible au lancement du jeu."
#: doc/classes/Light.xml
msgid "The light's bake mode. See [enum BakeMode]."
@@ -42722,6 +42808,9 @@ msgid ""
"The light's color. An [i]overbright[/i] color can be used to achieve a "
"result equivalent to increasing the light's [member light_energy]."
msgstr ""
+"La couleur de la lumière. Une couleur [i]sur-brillante[/i] peut être "
+"utilisée pour un résultant équivalent à augmenter l'énergie [member "
+"light_energy] de la lumière."
#: doc/classes/Light.xml
msgid "The light will affect objects in the selected layers."
@@ -42733,18 +42822,26 @@ msgid ""
"[OmniLight] and [SpotLight], changing this value will only change the light "
"color's intensity, not the light's radius."
msgstr ""
+"Le multiplicateur de force de la lumière (ça n'a aucune unité physique). "
+"Pour [OmniLight] et [SpotLight], changer cette valeur ne changera que "
+"l'intensité de la constante de couleur de la lumière, et non le rayon de la "
+"lumière."
#: doc/classes/Light.xml
msgid ""
"Secondary multiplier used with indirect light (light bounces). This works on "
"both [BakedLightmap] and [GIProbe]."
msgstr ""
+"Le multiplicateur secondaire utilisé pour la lumière indirecte (les rebonds "
+"de lumière). Cela fonctionne avec [BakedLightmap] et aussi [GIProbe]."
#: doc/classes/Light.xml
msgid ""
"If [code]true[/code], the light's effect is reversed, darkening areas and "
"casting bright shadows."
msgstr ""
+"Si [code]true[/code], l'effet de la lumière est inversé, assombrissant les "
+"zones et lançant des ombres lumineuses."
#: doc/classes/Light.xml
msgid ""
@@ -42761,6 +42858,11 @@ msgid ""
"emission, this can be used to avoid unrealistic reflections when placing "
"lights above an emissive surface."
msgstr ""
+"L'intensité du reflet spéculaire dans les objets touchés par la lumière. "
+"Avec [code]0[/code], la lumière devient une lumière purement diffuse. Si ça "
+"n'est pas une émission pré-calculée, cela peut être utilisé pour éviter des "
+"reflets irréalistes lorsqu'on place des lumières au-dessus d'une surface "
+"émise."
#: doc/classes/Light.xml
msgid ""
@@ -42768,6 +42870,10 @@ msgid ""
"shadowing (\"shadow acne\"), while too large a value causes shadows to "
"separate from casters (\"peter-panning\"). Adjust as needed."
msgstr ""
+"Utilisé pour ajuster l'apparence de l'ombre. Une valeur trop petite résulte "
+"au auto-ombrage (« shadow acne »), et quqand trop grande, ça provoque des "
+"ombres séparées de l'objet qui crée l'ombre (« peter-panning »). Réglez "
+"selon les besoins."
#: doc/classes/Light.xml
msgid "The color of shadows cast by this light."
@@ -42781,6 +42887,11 @@ msgid ""
"[b]Note:[/b] Contact shadows can look broken, so leaving this property to "
"[code]0.0[/code] is recommended."
msgstr ""
+"Tente de réduire l'écart [member shadow_bias] en rendant les ombres de "
+"contact en fonction de l'espace-écran. Cela a un impact sur les "
+"performances, surtout avec des valeurs élevées.\n"
+"[b]Note :[/b] Les ombres de contact peuvent sembler brisées, donc laisser "
+"cette propriété à [code]0.0[/code] est plutôt recommandé."
#: doc/classes/Light.xml
msgid "If [code]true[/code], the light will cast shadows."
@@ -42793,6 +42904,11 @@ msgid ""
"cast a shadow on both sides of the mesh, set the mesh to use double-sided "
"shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]."
msgstr ""
+"Si [code]true[/code], inverse la face arrière du maillage. Cela peut être "
+"utile lorsque vous avez un maillage plat qui a une lumière derrière elle. Si "
+"vous avez besoin de lancer une ombre sur les deux côtés du maillage, "
+"définissez le maillage pour utiliser les deux faces avec [constant "
+"GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]"
#: doc/classes/Light.xml
msgid "Constant for accessing [member light_energy]."
@@ -42892,10 +43008,13 @@ msgid ""
"Light is ignored when baking.\n"
"[b]Note:[/b] Hiding a light does [i]not[/i] affect baking."
msgstr ""
+"La lumière est ignorée lors du pré-calcul.\n"
+"[b]Note :[/b] L'enregistrement d'une lumière ne [i]n'affecte pas[/i] le pré-"
+"calcul."
#: doc/classes/Light.xml
msgid "Only indirect lighting will be baked (default)."
-msgstr ""
+msgstr "Seul l'éclairage indirect sera pré-calculé (choix par défaut)."
#: doc/classes/Light.xml
msgid ""
@@ -42903,6 +43022,9 @@ msgid ""
"[b]Note:[/b] You should hide the light if you don't want it to appear twice "
"(dynamic and baked)."
msgstr ""
+"La lumière directe et indirecte sera pré-calculée.\n"
+"[b]Note :[/b] Vous devriez cacher la lumière si vous ne voulez pas qu'elle "
+"apparaisse deux fois (une fois dynamique et une autre pour le pré-calcul)."
#: doc/classes/Light2D.xml
msgid "Casts light in a 2D environment."
@@ -42915,6 +43037,11 @@ msgid ""
"parameters (range and shadows-related).\n"
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
+"Montre la lumière dans un environnement 2D. La lumière est définie par une "
+"texture (généralement grise), une couleur, une valeur énergétique, un mode "
+"(voir les constantes), et divers autres paramètres (relatifs à la portée et "
+"aux ombres).\n"
+"[b]Note :[/b] Light2D peut aussi être utilisée comme masque."
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
@@ -42939,20 +43066,23 @@ msgstr ""
#: doc/classes/Light2D.xml
msgid "The Light2D's mode. See [enum Mode] constants for values."
msgstr ""
+"Le mode de la Light2D. Voir les constantes [enum Mode] pour les valeurs."
#: doc/classes/Light2D.xml
msgid "The offset of the Light2D's [code]texture[/code]."
-msgstr ""
+msgstr "Le décalage de la [code]texture[/code] de la Light2D."
#: doc/classes/Light2D.xml
msgid "The height of the Light2D. Used with 2D normal mapping."
-msgstr ""
+msgstr "La hauteur du Light2D. Utilisé avec une mapping de normale 2D."
#: doc/classes/Light2D.xml
msgid ""
"The layer mask. Only objects with a matching mask will be affected by the "
"Light2D."
msgstr ""
+"Le masque de calque. Seuls les objets avec un masque correspondant seront "
+"sous l'influence de ce Light2D."
#: doc/classes/Light2D.xml
msgid "Maximum layer value of objects that are affected by the Light2D."
@@ -43003,13 +43133,16 @@ msgstr "Valeur de lissage pour les ombres."
#: doc/classes/Light2D.xml
msgid "Smooth shadow gradient length."
-msgstr ""
+msgstr "Longeur de lissage du dégradé d'ombre."
#: doc/classes/Light2D.xml
msgid ""
"The shadow mask. Used with [LightOccluder2D] to cast shadows. Only occluders "
"with a matching light mask will cast shadows."
msgstr ""
+"Le masque d'ombre. Utilisé avec [LightOccluder2D] pour lancer des ombres. "
+"Seuls les occulteurs avec un masque de lumière correspondant lanceront des "
+"ombres."
#: doc/classes/Light2D.xml
msgid "[Texture] used for the Light2D's appearance."
@@ -43024,18 +43157,24 @@ msgid ""
"Adds the value of pixels corresponding to the Light2D to the values of "
"pixels under it. This is the common behavior of a light."
msgstr ""
+"Ajoute la valeur des pixels correspondant à la Light2D aux valeurs des "
+"pixels sous elle. C'est le comportement classique des lumières."
#: doc/classes/Light2D.xml
msgid ""
"Subtracts the value of pixels corresponding to the Light2D to the values of "
"pixels under it, resulting in inversed light effect."
msgstr ""
+"Soustrait la valeur des pixels correspondant à la Light2D aux valeurs des "
+"pixels sous elle, ce qui entraîne un effet de lumière inversé."
#: doc/classes/Light2D.xml
msgid ""
"Mix the value of pixels corresponding to the Light2D to the values of pixels "
"under it by linear interpolation."
msgstr ""
+"Mélange la valeur des pixels correspondant à la Light2D aux valeurs des "
+"pixels sous elle, via une interpolation linéaire."
#: doc/classes/Light2D.xml
msgid ""
@@ -43043,40 +43182,54 @@ msgid ""
"parts of the screen underneath depending on the value of each pixel of the "
"light (mask) texture."
msgstr ""
+"La texture de lumière de la Light2D est utilisée comme masque, cache ou "
+"révèle des parties de l'écran sous la valeur de chaque pixel de la texture "
+"de la lumière (masque)."
#: doc/classes/Light2D.xml
msgid "No filter applies to the shadow map. See [member shadow_filter]."
msgstr ""
+"Aucun filtre ne s'applique à la carte d'ombre. Voir [member Shadow_filter]."
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (3 samples) applies to the shadow map. See "
"[member shadow_filter]."
msgstr ""
+"Le pourcentage de filtrage proche (3 échantillons) s'applique à la carte de "
+"l'ombre. Voir [member Shadow_filter]."
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (5 samples) applies to the shadow map. See "
"[member shadow_filter]."
msgstr ""
+"Le pourcentage de filtrage proche (5 échantillons) s'applique à la carte de "
+"l'ombre. Voir [member Shadow_filter]."
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (7 samples) applies to the shadow map. See "
"[member shadow_filter]."
msgstr ""
+"Le pourcentage de filtrage proche (7 échantillons) s'applique à la carte de "
+"l'ombre. Voir [member Shadow_filter]."
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (9 samples) applies to the shadow map. See "
"[member shadow_filter]."
msgstr ""
+"Le pourcentage de filtrage proche (9 échantillons) s'applique à la carte de "
+"l'ombre. Voir [member Shadow_filter]."
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (13 samples) applies to the shadow map. See "
"[member shadow_filter]."
msgstr ""
+"Le pourcentage de filtrage proche (13 échantillons) s'applique à la carte de "
+"l'ombre. Voir [member Shadow_filter]."
#: doc/classes/LightOccluder2D.xml
msgid "Occludes light cast by a Light2D, casting shadows."
@@ -43094,10 +43247,12 @@ msgid ""
"The LightOccluder2D's light mask. The LightOccluder2D will cast shadows only "
"from Light2D(s) that have the same light mask(s)."
msgstr ""
+"Le masque de lumière du LightOccluder2D. Le LightOccluder2D ne lancera que "
+"des ombres que sur les Light2D qui ont le même masque de lumière."
#: doc/classes/LightOccluder2D.xml
msgid "The [OccluderPolygon2D] used to compute the shadow."
-msgstr ""
+msgstr "Le [OccluderPolygon2D] utilisé pour calculer l'ombre."
#: doc/classes/Line2D.xml
msgid "A 2D line."
@@ -43113,6 +43268,14 @@ msgid ""
"[member ProjectSettings.rendering/limits/buffers/"
"canvas_polygon_index_buffer_size_kb]."
msgstr ""
+"Une ligne à travers plusieurs points dans l'espace 2D. Supporte une largeur "
+"et une couleur différentes sur la longueur, la texture et plusieurs types "
+"d'embout et de jointure.\n"
+"[b]Note :[/b] Par défaut, Godot ne peut dessiner que 4 096 points de "
+"polygone à la fois. Pour augmenter cette limite, ouvrez les paramètres du "
+"projet et augmentez [member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_buffer_size_kb] et [member ProjectSettings.rendering/limits/"
+"buffers/canvas_polygon_index_buffer_size_kb]"
#: doc/classes/Line2D.xml
msgid ""
@@ -43125,10 +43288,18 @@ msgid ""
"get_point_count][/code]), the point will be appended at the end of the point "
"list."
msgstr ""
+"Ajoute un point au [code]position[/code]. Ajoute le point à la fin de la "
+"ligne.\n"
+"Si [code]at_position[/code] est donné, le point est inséré avant l'indice "
+"[code]at_position[/code], en déplaçant ce point (et chaque point après) "
+"après le point inséré. Si [code]at_position[/code] n'est pas donné, ou est "
+"une valeur invalide ([code]at_position < 0[/code] ou [code]at_position >= "
+"[method get_point_count][/code]), le point sera ajouté à la fin de la liste "
+"des points."
#: doc/classes/Line2D.xml
msgid "Removes all points from the line."
-msgstr ""
+msgstr "Retire tous les points de la ligne."
#: doc/classes/Line2D.xml
msgid "Returns the Line2D's amount of points."
@@ -43422,6 +43593,15 @@ msgid ""
"select(2, 5) # Will select \"lco\".\n"
"[/codeblock]"
msgstr ""
+"Sélectionne les caractères à l'intérieur du [LineEdit] entre [code]from[/"
+"code] et [code]to[/code]. Par défaut, [code]from[/code] est au début et "
+"[code]to[/code] à la fin.\n"
+"[codeblock]\n"
+"text = \"Bienvenue\"\n"
+"select() # Will select \"Bienvenue\".\n"
+"select(5) # Will select \"venue\".\n"
+"select(2, 7) # Will select \"enven\".\n"
+"[/codeblock]"
#: doc/classes/LineEdit.xml
msgid "Selects the whole [String]."
@@ -43444,6 +43624,8 @@ msgid ""
"The cursor's position inside the [LineEdit]. When set, the text may scroll "
"to accommodate it."
msgstr ""
+"La position du curseur dans le [LineEdit]. Lorsqu'il est défini, le texte "
+"peut défiler pour l'afficher."
#: doc/classes/LineEdit.xml
msgid ""
@@ -44361,6 +44543,9 @@ msgid ""
"text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"Le texte [Color] utilisé quand le [MenuButton] a le focus. Il suffit de "
+"remplacer la couleur de texte normale du bouton. Les états désactivés, "
+"survolés et pressés sont prioritaires sur cette couleur."
#: doc/classes/MenuButton.xml
msgid "Text [Color] used when the [MenuButton] is being hovered."
@@ -44388,6 +44573,9 @@ msgid ""
"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
"visual effect."
msgstr ""
+"La [StyleBox] utilisée quand le [MenuButton] a le focus. Elle est affichée "
+"par dessus l'actuelle [StyleBox], donc utiliser [StyleBoxEmpty] va tout "
+"simplement désactiver l'effet visuel du focus."
#: doc/classes/MenuButton.xml
msgid "[StyleBox] used when the [MenuButton] is being hovered."
@@ -44414,6 +44602,12 @@ msgid ""
"surfaces is preferred to a single surface, because objects created in 3D "
"editing software commonly contain multiple materials."
msgstr ""
+"Mesh est un type de [Resource] qui contient la géométrie à base de tableaux "
+"de sommets, divisé en [i]surfaces[/i]. Chaque surface contient un tableau "
+"complètement séparé et un matériau utilisé pour le dessiner. Au niveau du "
+"design, un maillage avec plusieurs surfaces est préféré à une seule surface, "
+"car les objets créés dans le logiciel d'édition 3D contiennent généralement "
+"plusieurs matériaux."
#: doc/classes/Mesh.xml
msgid ""
@@ -44424,6 +44618,13 @@ msgid ""
"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
"simplified to reduce the amount of vertices. Disabled by default."
msgstr ""
+"Calcule la [ConvexPolygonShape] du maillage.\n"
+"Si [code]clean[/code] est [code]true[/code] (par défaut), les sommets "
+"intérieurs et en double sont automatiquement supprimés. Vous pouvez le "
+"définir à [code]false[/code] pour rendre le processus plus rapide si "
+"nécessaire.\n"
+"Si [code]simplify[/code] est [code]true[/code], la géométrie peut être plus "
+"simplifiée pour réduire la quantité de sommets. Désactivé par défaut."
#: doc/classes/Mesh.xml
msgid ""
@@ -44432,6 +44633,10 @@ msgid ""
"[b]Note:[/b] This method typically returns the vertices in reverse order (e."
"g. clockwise to counterclockwise)."
msgstr ""
+"Calcule un maillage de contour avec un décalage défini (marge) du maillage "
+"d'origine.\n"
+"[b]Note :[/b] Cette méthode renvoie généralement les sommets en ordre "
+"inverse (par ex., du sens horaire au sens anti-horaire)."
#: doc/classes/Mesh.xml
msgid "Calculate a [ConcavePolygonShape] from the mesh."
@@ -44448,6 +44653,10 @@ msgid ""
"get_transformed_aabb].\n"
"[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]."
msgstr ""
+"Retourne le plus petit [AABB] englobant ce maillage dans l'espace local. Non "
+"affecté par [code]custom_aabb[/code]. Voir aussi [method VisualInstance."
+"get_transformed_aabb]\n"
+"[b]Note :[/b] Ceci n'est implémenté que pour [ArrayMesh] et [PrimitiveMesh]."
#: doc/classes/Mesh.xml
msgid ""
@@ -45303,12 +45512,16 @@ msgid ""
"The height at which the camera is placed in relation to the ground (i.e. "
"[ARVROrigin] node)."
msgstr ""
+"La hauteur à laquelle la caméra est placée par rapport au sol (c'est-à-dire "
+"au nœud [ARVROrigin])."
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
"The interocular distance, also known as the interpupillary distance. The "
"distance between the pupils of the left and right eye."
msgstr ""
+"La distance interoculaire, aussi appelée la distance interpupillaire. La "
+"distance entre la pupille de l'œil gauche et celle du l'œil droit."
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
@@ -45321,7 +45534,7 @@ msgstr ""
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid "The k2 lens factor, see k1."
-msgstr ""
+msgstr "Le facteur k2 de lentille, voir k1."
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
@@ -46322,6 +46535,20 @@ msgid ""
"(which should be avoided in general) the result might not be what is "
"expected."
msgstr ""
+"Retourne [code]true[/code] si la coordonnée [code]point[/code] global "
+"appartient actuellement à la [code]region[/code] de la navigation. Dans ce "
+"contexte, l'une des faces du polygone de maillages de navigation de la "
+"région a une position possible à la distance la plus proche de ce point par "
+"rapport à tous les autres maillages de navigation provenant d'autres régions "
+"de navigation également enregistrées sur la carte de navigation de la région "
+"donnée.\n"
+"Si plusieurs maillages de navigation ont des positions à égale distance, la "
+"région de navigation dont les polygones sont traités en premier sont "
+"retournés. Les polygones sont traités dans l'ordre d'ajout des régions dans "
+"le serveur de navigation.\n"
+"[b]Note :[/b] Si les maillages de navigation provenant de différentes "
+"régions de navigation se chevauchent (qui doivent être évités en général), "
+"le résultat peut être inattendu."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
@@ -46340,6 +46567,9 @@ msgid ""
"Set the region's navigation layers. This allows selecting regions from a "
"path request (when using [method Navigation2DServer.map_get_path])."
msgstr ""
+"Définit les calques de navigation de la région. Cela permet de sélectionner "
+"les régions à partir d'une requête de chemin (en utilisant [method "
+"Navigation2DServer.map_get_path])"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
@@ -46378,6 +46608,21 @@ msgid ""
"position from this function should be used as the next movement position for "
"the agent's parent Node."
msgstr ""
+"Agent 3D utilisé dans la navigation pour atteindre un emplacement tout en "
+"évitant les obstacles statiques et dynamiques. Les obstacles dynamiques sont "
+"évités en utilisant la méthode RVO (Reciprocal Velocity Obstacles). L'agent "
+"a besoin de données de navigation pour fonctionner correctement. Par défaut "
+"ce nœud s'enregistrera à la carte de navigation par défaut du [World]. Si ce "
+"nœud est un enfant d'un nœud [Navigation] il s'inscrira à la carte de "
+"navigation du nœud de navigation ou la fonction [method set_navigation] peut "
+"être utilisée pour définir le nœud de navigation directement. "
+"[NavigationAgent] est sûr lors du traitement physique.\n"
+"[b]Note :[/b] Après que [method set_target_location] est utilisé, il est "
+"nécessaire d'utiliser la fonction [method get_next_location] une fois par "
+"trame physique pour mettre à jour la logique de chemin interne du "
+"NavigationAgent. La position vectorielle retournée de cette fonction devrait "
+"être utilisée comme position de mouvement suivante pour le Node parent de "
+"l'agent principal."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46385,6 +46630,9 @@ msgid ""
"position. The user must set the target location with [method "
"set_target_location] in order for this to be accurate."
msgstr ""
+"Retourne la distance jusqu'à l'emplacement cible, en utilisant la position "
+"globale de l'agent observé. L'utilisateur doit définir l'emplacement de la "
+"cible avec [method set_target_location] afin d'être précis."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46392,6 +46640,9 @@ msgid ""
"if the navigation path is altered in any way. Because of this, it would be "
"best to check this each frame."
msgstr ""
+"Retourne l'emplacement final accessible dans les coordonnées globales. Cela "
+"peut changer si le chemin de navigation est modifié de quelque manière que "
+"ce soit. Pour cette raison, il serait préférable de vérifier chaque trame."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46404,6 +46655,15 @@ msgid ""
"for the agents movement as this function also updates the internal path "
"logic."
msgstr ""
+"Retourne le chemin actuel de l'agent du début jusqu'à la fin, dans les "
+"coordonnées globales. Le chemin ne met à jour que lorsque l'emplacement de "
+"la cible est modifié ou que l'agent demande un re-calcul du chemin. Le "
+"réseau de chemin n'est pas destiné à être utilisé dans le mouvement de "
+"chemin direct car l'agent a sa propre logique de chemin interne qui serait "
+"corrompu en changeant le réseau de chemin manuellement. Utilisez la [method "
+"get_next_location] voulue une fois chaque trame de physique pour recevoir le "
+"point de chemin suivant pour le mouvement des agents car cette fonction met "
+"également à jour la logique du chemin interne."
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -46416,6 +46676,8 @@ msgid ""
"Returns the [Navigation] node that the agent is using for its navigation "
"system."
msgstr ""
+"Retourne le nœud [Navigation] que l'agent utilise pour son système de "
+"navigation."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46427,6 +46689,14 @@ msgid ""
"the navigation map for the NavigationAgent and also update the agent on the "
"NavigationServer."
msgstr ""
+"Retourne le [RID] de la carte de navigation pour ce nœud NavigationAgent. "
+"Cette fonction retourne toujours la carte définie sur le nœud "
+"NavigationAgent et non la carte de l'agent abstrait sur le serveur "
+"Navigation. Si la carte de l'agent est changée directement avec l'API de "
+"NavigationServer, le nœud NavigationAgent ne sera pas au courant du "
+"changement de carte. Utilisez [method set_navigation_map] pour changer la "
+"carte de navigation pour le NavigationAgent et mettre à jour l'agent sur le "
+"NavigationServer."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46436,6 +46706,12 @@ msgid ""
"use of this function once every physics frame is required to update the "
"internal path logic of the NavigationAgent."
msgstr ""
+"Retourne l'emplacement suivant dans les coordonnées globales qui peuvent "
+"être déplacées, en s'assurant qu'il n'y a pas d'objets statiques dans le "
+"chemin. Si l'agent n'a pas de chemin de navigation, il retourne la position "
+"du parent de l'agent. L'utilisation de cette fonction une fois chaque trame "
+"physique est nécessaire pour mettre à jour la logique de chemin interne de "
+"la NavigationAgent."
#: doc/classes/NavigationAgent.xml
#, fuzzy
@@ -46477,18 +46753,25 @@ msgid ""
"Sets the [Navigation] node used by the agent. Useful when you don't want to "
"make the agent a child of a [Navigation] node."
msgstr ""
+"Définit le nœud [Navigation] utilisé par l'agent. Utile lorsque vous ne "
+"voulez pas faire de l'agent un enfant d'un nœud [Navigation]."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"Sets the [RID] of the navigation map this NavigationAgent node should use "
"and also updates the [code]agent[/code] on the NavigationServer."
msgstr ""
+"Définit le [RID] de la carte de navigation que ce nœud NavigationAgent "
+"devrait utiliser et met à jour le [code]agent[/code] sur le serveur de "
+"navigation."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
+"Définit l'emplacement final souhaité de l'utilisateur. Cela permettra "
+"d'effacer le chemin de navigation actuel."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46496,6 +46779,9 @@ msgid ""
"adjust the velocity to avoid collisions. Once the adjustment to the velocity "
"is complete, it will emit the [signal velocity_computed] signal."
msgstr ""
+"Envoie la vitesse spécifiée à l'algorithme d'évitement de collision. Celui-"
+"ci ajustera la vitesse pour éviter les collisions. Une fois le réglage de la "
+"vitesse terminée, il émettra le signal [signal velocity_computed]."
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -46506,6 +46792,14 @@ msgid ""
"that the developer baked with appropriate agent radius or height values are "
"required to support different-sized agents."
msgstr ""
+"La hauteur du NavigationAgent est soustraite de la valeur de l'axe Y de "
+"toute position de chemin vectoriel pour ce NavigationAgent. Le décalage de "
+"hauteur du NavigationAgent ne change pas ou n'influence pas le résultat de "
+"la requête du maillage de navigation ou du cheminement. Des cartes de "
+"navigation supplémentaires qui utilisent des régions avec des maillages de "
+"navigation que le développeur a pré-calculé avec un rayon d'agent approprié "
+"ou des valeurs de hauteur sont nécessaires pour supporter des agents de "
+"taille différente."
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -46516,12 +46810,21 @@ msgid ""
"with many registered agents has a significant performance cost and should "
"only be enabled on agents that currently require it."
msgstr ""
+"Si [code]true[/code] l'agent est enregistré pour un rappel d'évitement RVO "
+"sur le [NavigationServer]. Lorsque [method set_velocity] est utilisé et que "
+"le traitement est terminé, un Vector3 [code]safe_velocity[/code] est reçu "
+"avec une connexion du signal [signal velocity_computed]. Le traitement de "
+"l'évitement avec de nombreux agents enregistrés a un coût de performance "
+"important et ne devrait être activé que pour les agents qui en ont "
+"actuellement besoin."
#: doc/classes/NavigationAgent.xml
msgid ""
"Ignores collisions on the Y axis. Must be [code]true[/code] to move on a "
"horizontal plane."
msgstr ""
+"Ignore les collisions sur l'axe Y. Doit être [code]true[/code] pour se "
+"déplacer sur un plan horizontal."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
#, fuzzy
@@ -46539,6 +46842,10 @@ msgid ""
"belongs to. On path requests the agent will ignore navmeshes without at "
"least one matching layer."
msgstr ""
+"Un masque de bit déterminant toutes les calque de carte de navigation "
+"auxquels ce [NavigationAgent] appartient. Lors de requête de chemin, l'agent "
+"va ignorer les maillages de navigation qui n'ont pas au moins un calque "
+"correspondant."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
#, fuzzy
@@ -46555,6 +46862,14 @@ msgid ""
"it will constantly overshoot or undershoot the distance to the next point on "
"each physics frame update."
msgstr ""
+"Le seuil de distance avant qu'un point de chemin soit considéré comme "
+"atteint. Cela permettra à un agent de ne pas avoir à atteindre un point de "
+"chemin exactement sur le chemin, mais uniquement un zone autour. Si cette "
+"valeur est élevée, la NavigationAgent sautera des points sur le chemin qui "
+"peut conduire à quitter le maillage de navigation. Si cette valeur est trop "
+"faible, le NavigationAgent sera coincé dans une boucle de chemin parce qu'il "
+"va constamment mal estimer la distance jusqu'au point suivant à chaque mise "
+"à jour de la trame physique."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46562,6 +46877,9 @@ msgid ""
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
+"La distance maximale de l'agent est permise loin du chemin idéal jusqu'à "
+"l'emplacement final. Cela peut arriver en essayant d'éviter les collisions. "
+"Lorsque la distance maximale est dépassée, cela recalcule le chemin idéal."
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -46572,6 +46890,13 @@ msgid ""
"bake [NavigationMesh] resources with a different [member NavigationMesh."
"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
+"Le rayon d'évitement de l'agent. Il s'agit du « corps » de l'agent "
+"d'évitement et non le rayon de la manœuvre d'évitement (qui est contrôlé par "
+"[member neighbor_dist)].\n"
+"N'affecte pas le cheminement normal. Pour changer les ressources "
+"[NavigationMesh] de rayon de pré-calcul de cheminement d'un acteur avec la "
+"propriété [member NavigationMesh.agent_radius] différente et utiliser "
+"différentes cartes de navigation pour chaque acteur."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46582,6 +46907,12 @@ msgid ""
"overshoot or undershoot the distance to the final target point on each "
"physics frame update."
msgstr ""
+"Le seuil de distance avant qu'un point de chemin soit considéré comme "
+"atteint. Cela permettra à un agent de ne pas avoir à atteindre un point de "
+"chemin exactement sur le chemin, mais uniquement un zone autour. Si cette "
+"valeur est trop faible, le NavigationAgent sera coincé dans une boucle de "
+"chemin parce qu'il va constamment mal estimer la distance jusqu'au point "
+"suivant à chaque mise à jour de la trame physique."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46591,6 +46922,11 @@ msgid ""
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
msgstr ""
+"La quantité minimale de temps pour laquelle les vitesses de cet agent, "
+"calculées avec l'algorithme d'évitement de collision, sont sûres pour les "
+"autres agents. Plus le nombre est élevé, plus tôt l'agent répondra à "
+"d'autres agents, mais moins il aura la liberté de choisir sa vitesse. Ça "
+"doit être positif."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
#, fuzzy
@@ -46602,18 +46938,24 @@ msgid ""
"Notifies when the navigation path changes. This can be triggered by the "
"navigation system or by the user changing the path."
msgstr ""
+"Notifie quand le chemin de navigation change. Cela peut être déclenché par "
+"le système de navigation ou par l'utilisateur qui change le chemin."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"Notifies when the player-defined target, set with [method "
"set_target_location], is reached."
msgstr ""
+"Notifie quand la cible définie par le joueur, définie avec [method "
+"set_target_location], est atteinte."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"Notifies when the collision avoidance velocity is calculated after a call to "
"[method set_velocity]."
msgstr ""
+"Notifie quand la vitesse d'évitement de collision est calculée après un "
+"appel à [method set_velocity]."
#: doc/classes/NavigationAgent2D.xml
msgid "2D agent used in navigation for collision avoidance."
@@ -46635,6 +46977,21 @@ msgid ""
"position from this function should be used as the next movement position for "
"the agent's parent Node."
msgstr ""
+"L'agent 2D utilisé dans la navigation pour atteindre un emplacement tout en "
+"évitant les obstacles statiques et dynamiques. Les obstacles dynamiques sont "
+"évités en utilisant l'évitement de collision RVO (Reciprocal Velocity "
+"Obstacles). L'agent a besoin de données de navigation pour fonctionner "
+"correctement. Par défaut ce nœud s'enregistrera à la carte de navigation par "
+"défaut du [World2D]. Si ce nœud est un enfant d'un nœud [Navigation2D] il "
+"s'inscrira à la carte de navigation du nœud de navigation ou la fonction "
+"[method set_navigation] peut être utilisé pour définir le nœud de navigation "
+"directement. [NavigationAgent2D] est sûr lors des trames physiques.\n"
+"[b]Note :[/b] Après que [method set_target_location] est utilisé, il est "
+"nécessaire d'utiliser la fonction [method get_next_location] une fois chaque "
+"trame physique pour mettre à jour la logique interne de chemin du "
+"NavigationAgent. La position vectorielle retournée de cette fonction devrait "
+"être utilisée comme position de mouvement suivante pour le Node parent de "
+"l'agent principal."
#: doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46647,6 +47004,8 @@ msgid ""
"Returns the [Navigation2D] node that the agent is using for its navigation "
"system."
msgstr ""
+"Retourne le nœud [Navigation2D] que l'agent utilise pour son système de "
+"navigation."
#: doc/classes/NavigationAgent2D.xml
#, fuzzy
@@ -46658,6 +47017,8 @@ msgid ""
"Sets the [Navigation2D] node used by the agent. Useful when you don't want "
"to make the agent a child of a [Navigation2D] node."
msgstr ""
+"Définit le nœud [Navigation2D] utilisé par l'agent. Utile lorsque vous ne "
+"voulez pas faire de l'agent un enfant d'un nœud [Navigation2D]."
#: doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46668,6 +47029,13 @@ msgid ""
"with many registered agents has a significant performance cost and should "
"only be enabled on agents that currently require it."
msgstr ""
+"Si [code]true[/code] l'agent est enregistré pour un rappel d'évitement RVO "
+"sur le [Navigation2DServer]. Lorsque [method set_velocity] est utilisé et "
+"que le traitement est terminé, un Vector2 [code]safe_velocity[/code] est "
+"reçu avec une connexion au signal [signal velocity_computed]. Le traitement "
+"de l'évitement avec de nombreux agents enregistrés a un coût de performance "
+"important et ne devrait être activé que pour les agents qui en ont "
+"actuellement besoin."
#: doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46675,6 +47043,10 @@ msgid ""
"belongs to. On path requests the agent will ignore navmeshes without at "
"least one matching layer."
msgstr ""
+"Un masque de bit déterminant toutes les calque de carte de navigation "
+"auxquels ce [NavigationAgent2D] appartient. Lors de requête de chemin, "
+"l'agent va ignorer les maillages de navigation qui n'ont pas au moins un "
+"calque correspondant."
#: doc/classes/NavigationAgent2D.xml
msgid ""
@@ -46683,6 +47055,10 @@ msgid ""
"[member neighbor_dist]).\n"
"Does not affect normal pathfinding."
msgstr ""
+"Le rayon d'évitement de l'agent. Il s'agit du « corps » de l'agent "
+"d'évitement et non le rayon de la manœuvre d'évitement (qui est contrôlé par "
+"[member neighbor_dist)].\n"
+"N'affecte pas le cheminement normal."
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
@@ -46852,12 +47228,17 @@ msgid ""
"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
+"Les calques de physique pour scanner les collisions statiques.\n"
+"Seulement utilisé quand [member geometry_parsed_geometry_type] est [constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS] ou [constant] PARSED_GEOMETRY_BOTH]."
#: doc/classes/NavigationMesh.xml
msgid ""
"Determines which type of nodes will be parsed as geometry. See [enum "
"ParsedGeometryType] for possible values."
msgstr ""
+"Détermine quel type de nœuds seront interprétés comme géométrie. Voir [enum "
+"ParsedGeometryType] pour les valeurs possibles."
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -46872,12 +47253,18 @@ msgid ""
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
+"Le nom du groupe pour scanner la géométrie.\n"
+"Seulement utilisé lorsque [member geometry_source_geometry_mode] est "
+"[constant SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] ou [constant] "
+"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
#: doc/classes/NavigationMesh.xml
msgid ""
"The maximum number of vertices allowed for polygons generated during the "
"contour to polygon conversion process."
msgstr ""
+"Le nombre maximal de sommets permis pour les polygones générés pendant le "
+"contour du processus de conversion en polygones."
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -46886,6 +47273,10 @@ msgid ""
"[b]Note:[/b] This value will be squared to calculate the number of cells. "
"For example, a value of 20 will set the number of cells to 400."
msgstr ""
+"Toutes les régions ayant une taille inférieure à celle-ci seront fusionnées "
+"avec des régions plus grandes si possible.\n"
+"[b]Note :[/b] Cette valeur sera carrée pour calculer le nombre de cellules. "
+"Par exemple, une valeur de 20 définira le nombre de cellules à 400."
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -46894,12 +47285,18 @@ msgid ""
"cells allowed to form isolated island areas. For example, a value of 8 will "
"set the number of cells to 64."
msgstr ""
+"La taille minimale d'une région pour qu'elle soit créée.\n"
+"[b]Note :[/b] Cette valeur sera fixée pour calculer le nombre minimum de "
+"cellules autorisées à former des zones insulaires isolées. Par exemple, une "
+"valeur de 8 définira le nombre de cellules à 64."
#: doc/classes/NavigationMesh.xml
msgid ""
"Partitioning algorithm for creating the navigation mesh polys. See [enum "
"SamplePartitionType] for possible values."
msgstr ""
+"Algorithme de partitionnement pour la création des polygones de maillage de "
+"navigation. Voir [enum SamplePartitionType] pour les valeurs possibles."
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -46911,12 +47308,16 @@ msgstr ""
msgid ""
"Monotone partitioning. Use this if you want fast navigation mesh generation."
msgstr ""
+"Partage monotone. Utilisez ceci si vous voulez une génération de maillages "
+"de navigation rapide."
#: doc/classes/NavigationMesh.xml
msgid ""
"Layer partitioning. Good choice to use for tiled navigation mesh with medium "
"and small sized tiles."
msgstr ""
+"Le partitionnement du calque. Un bon choix à utiliser pour la maillage de "
+"navigation en carreaux de taille moyenne et petite."
#: doc/classes/NavigationMesh.xml
msgid "Represents the size of the [enum SamplePartitionType] enum."
@@ -46935,6 +47336,9 @@ msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
"the layers specified by [member geometry_collision_mask]."
msgstr ""
+"Interprète l'élément de collision [StaticBody] comme géométrie. Cet élément "
+"doit être dans l'un des calques spécifiés par [member "
+"geometry_collision_mask]."
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -46952,18 +47356,24 @@ msgstr "Représente la taille de l’enum [enum ParsedGeometryType]."
msgid ""
"Scans the child nodes of [NavigationMeshInstance] recursively for geometry."
msgstr ""
+"Scanne les nœuds d'enfants de [NavigationMeshInstance] récursivement pour la "
+"géométrie."
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
"group is specified by [member geometry_source_group_name]."
msgstr ""
+"Scanne les nœuds dans un groupe et leurs nœuds enfants récursivement pour la "
+"géométrie. Le groupe est spécifié par [member geometry_source_group_name]."
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
"geometry_source_group_name]."
msgstr ""
+"Utilise des nœuds dans un groupe de géométrie. Le groupe est spécifié par "
+"[member geometry_source_group_name]."
#: doc/classes/NavigationMesh.xml
msgid "Represents the size of the [enum SourceGeometryMode] enum."
@@ -46972,6 +47382,7 @@ msgstr "Représente la taille de l'énumération [enum SourceGeometryMode]."
#: doc/classes/NavigationMeshGenerator.xml
msgid "Helper class for creating and clearing navigation meshes."
msgstr ""
+"Classe d'aide pour la création et la suppression des maillages de navigation."
#: doc/classes/NavigationMeshGenerator.xml
msgid ""
@@ -47014,6 +47425,52 @@ msgid ""
"inside, the baking will generate navigation mesh areas that are inside the "
"obstructing source geometry mesh."
msgstr ""
+"Cette classe est responsable de la création et du la suppression des "
+"maillages de navigation 3D utilisés comme [NavigationMesh] ressources à "
+"l'intérieur des [NavigationMeshInstance]. Le [NavigationMeshGenerator] est "
+"très limité voire n'a aucune utilisation pour 2D car le processus de "
+"navigation de pré-calcule de maillages s'attend à des types de nœuds 3D et "
+"la géométrie source en 3D.\n"
+"L'ensemble du pré-calcule de maillages de navigation est préférable dans un "
+"autre fil d'exécution puisque les étapes de voxelisation, de collision et "
+"d'optimisation de maillages impliquées sont des opérations, sont très "
+"couteuses en temps processeur.\n"
+"Le pré-calcule de maillage de navigation se produit en plusieurs étapes et "
+"le résultat dépend de la géométrie source 3D et des propriétés de la "
+"ressource [NavigationMesh]. Dans la première étape, à partir d'un nœud "
+"racine et selon les propriétés [NavigationMesh], tous les nœuds de géométrie "
+"de source 3D valides sont collectés à partir du [SceneTree]. Deuxièmement, "
+"tous les nœuds collectés sont interprétés pour obtenir les données de "
+"géométrie 3D pertinentes et un maillage 3D combiné est construit. En raison "
+"des différents types d'objets à interpréter, des [MeshInstance] normaux aux "
+"[CSGShape] ou divers [CollisionObject], certaines opérations de collecte de "
+"données de géométrie peuvent déclencher des synchronisations du "
+"[VisualServer] et du [PhysicsServer]. La synchronisation du serveur peut "
+"avoir un effet négatif sur le temps de pré-calcule car elle implique souvent "
+"le verrouillage de [Mutex] dans le fil d'exécution. De nombreux objets à "
+"interpréter et de nombreuses synchronisations des serveurs peuvent augmenter "
+"considérablement le temps de pré-calcule. D'un autre côté, seulement "
+"quelques objets, mais très grands et complexes, prendront du temps de "
+"préparation des serveurs ce qui peuvent bloquer le rendu suivant. De règle "
+"générale, la quantité totale d'objets à interpréter, leur taille et leur "
+"complexité individuelles devraient être équilibrées pour éviter les "
+"problèmes de fluidité ou des temps de pré-calcule très longs. Le maillage "
+"combiné est ensuite transmis à l'Object Recast Navigation pour tester la "
+"géométrie source pour le terrain à parcourir adapté aux propriétés des "
+"agents [NavigationMesh] en créant un monde de voxel autour de la zone de "
+"maillage.\n"
+"Le maillage de navigation finalisé est ensuite retourné et enregistré à "
+"l'intérieur du [NavigationMesh] pour être utilisé comme ressource à "
+"l'intérieur des nœuds [NavigationMeshInstance].\n"
+"[b]Note :[/b] L'utilisation de maillages ne définissen pas seulement les "
+"surfaces à parcourir mais peut aussi empêcher le pré-calcul de fonctionner. "
+"La navigation n'a pas de concept de ce qu'est une géométrie \"à "
+"l'intérieur\" quand on traite de la géométrie de source de maillage et c'est "
+"intentionnel. Selon les paramètres de pré-calcule actuels, dès que le "
+"maillage obstructif est assez grande pour s'adapter à une zone de maillage "
+"de navigation à l'intérieur, le pré-calcule générera des zones de maillage "
+"de navigation qui sont à l'intérieur du maillage de géométrie de source "
+"obstructif."
#: doc/classes/NavigationMeshGenerator.xml
msgid ""
@@ -47024,6 +47481,12 @@ msgid ""
"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
+"Pré-calcule les données de navigation du [code]nav_mesh[/code] donné en "
+"interprétant les nœuds enfants dans le [code]root_node[/code] spécifié ou un "
+"groupe spécifique de nœuds pour la géométrie de source potentielle. Le "
+"comportement d'interprétation peut être contrôlé avec les propriétés [member "
+"NavigationMesh.geometry_parsed_geometry_type] et [member NavigationMesh."
+"geometry_source_geometry_mode] de la ressource [NavigationMesh]."
#: doc/classes/NavigationMeshGenerator.xml
#, fuzzy
@@ -47037,6 +47500,7 @@ msgid "An instance of a [NavigationMesh]."
msgstr "Une instance de [NavigationMesh]."
#: doc/classes/NavigationMeshInstance.xml
+#, fuzzy
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
@@ -47050,11 +47514,29 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
msgstr ""
+"Une instance de [NavigationMesh]. Il signale au nœud [Navigation] ce qui "
+"peut être navigué et ce qui ne peut pas, basé sur la ressource "
+"[NavigationMesh].\n"
+"Par défaut ce nœud s'enregistrera à la carte de navigation du [World] par "
+"défaut. Si ce nœud est un enfant d'un nœud [Navigation], il s'inscrira à la "
+"carte de navigation du nœud de navigation.\n"
+"Deux régions peuvent être reliées l'une à l'autre si elles partagent un même "
+"bord. Vous pouvez définir la distance minimale entre deux sommets "
+"nécessaires pour connecter deux bords en utilisant [method NavigationServer."
+"map_set_edge_connection_margin]\n"
+"[b]Note :[/b] Le chevauchement de deux régions n'est pas suffisant pour "
+"relier deux régions. Ils doivent partager un même bord.\n"
+"Le coût d'entrée dans cette région d'une autre région peut être contrôlé "
+"avec la valeur [member enter_cost].\n"
+"[b]Note : [/b] Cette valeur n'est pas ajoutée au coût du chemin lorsque la "
+"position de départ est déjà dans cette région.\n"
+"Le coût des distances de voyage dans cette région peut être contrôlé avec le "
+"multiplicateur [member travel_cost]."
#: doc/classes/NavigationMeshInstance.xml
msgid ""
@@ -47300,6 +47782,7 @@ msgid "A region of the 2D navigation map."
msgstr "Prépare le maillage de navigation."
#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
msgid ""
"A region of the navigation map. It tells the [Navigation2DServer] what can "
"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
@@ -47313,11 +47796,29 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
msgstr ""
+"Une instance de [NavigationMesh]. Il signale au nœud [Navigation] ce qui "
+"peut être navigué et ce qui ne peut pas, basé sur la ressource "
+"[NavigationMesh].\n"
+"Par défaut ce nœud s'enregistrera à la carte de navigation du [World] par "
+"défaut. Si ce nœud est un enfant d'un nœud [Navigation], il s'inscrira à la "
+"carte de navigation du nœud de navigation.\n"
+"Deux régions peuvent être reliées l'une à l'autre si elles partagent un même "
+"bord. Vous pouvez définir la distance minimale entre deux sommets "
+"nécessaires pour connecter deux bords en utilisant [method NavigationServer."
+"map_set_edge_connection_margin]\n"
+"[b]Note :[/b] Le chevauchement de deux régions n'est pas suffisant pour "
+"relier deux régions. Ils doivent partager un même bord.\n"
+"Le coût d'entrée dans cette région d'une autre région peut être contrôlé "
+"avec la valeur [member enter_cost].\n"
+"[b]Note : [/b] Cette valeur n'est pas ajoutée au coût du chemin lorsque la "
+"position de départ est déjà dans cette région.\n"
+"Le coût des distances de voyage dans cette région peut être contrôlé avec le "
+"multiplicateur [member travel_cost]."
#: doc/classes/NavigationPolygonInstance.xml
msgid ""
@@ -47456,6 +47957,54 @@ msgstr ""
msgid "Control activation of this server."
msgstr "Contrôle l'activation de ce serveur."
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr "Retourne l'état actuel de la connexion. Voir [enum ConnexionStatus]."
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid "Set the max packet size that this peer can handle."
+msgstr "Définit la texture de lumière à utiliser pour cette instance."
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -47476,6 +48025,18 @@ msgid ""
"the server port in UDP. You can use the [UPNP] class to try to forward the "
"server port automatically when starting the server."
msgstr ""
+"Une implémentation de PacketPeer qui devrait être passée au [member "
+"SceneTree.network_peer] après avoir été initialisé en tant que client ou "
+"serveur. Les événements peuvent ensuite être gérés en se connectant aux "
+"signaux de [SceneTree].\n"
+"L'intêret de ENet est de fournir un calque de communication à travers le "
+"réseau relativement léger, simple et robuste par dessus UDP (User Datagram "
+"Protocol).\n"
+"[b]Note :[/b] ENet utilise seulement UDP, et non TCP. Lors du branchement du "
+"port serveur pour rendre votre serveur accessible sur internet, vous n'avez "
+"besoin que d'envoyer le port serveur en UDP. Vous pouvez utiliser la classe "
+"[UPNP] pour essayer d'envoyer automatiquement le port serveur dès le "
+"démarrage du serveur."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47484,6 +48045,10 @@ msgid ""
"disconnecting them. If this is a client it simply closes the connection to "
"the server."
msgstr ""
+"Ferme la connexion. Ignoré si aucune connexion n'est actuellement établie. "
+"Si c'est un serveur, il essaie de notifier tous les clients avant de les "
+"déconnecter de force. Si c'est un client, il ferme simplement la connexion "
+"au serveur."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47506,6 +48071,25 @@ msgid ""
"code] is specified, the client will also listen to the given port; this is "
"useful for some NAT traversal techniques."
msgstr ""
+"Créer un client qui se connecte au serveur à [code]address[/code] donnée via "
+"le [code]port[/code]. L'adresse donnée doit être soit un nom de domaine "
+"entièrement qualifié (ex.: [code]\"www.example.com\"[/code]) ou une adresse "
+"IP en format IPv4 ou IPv6 (par exemple [code]\"192.168.1.1\"[/code)]. Le "
+"[code]port[/code] est le port que le serveur écoute. Les paramètres "
+"[code]in_bandwidth[/code] et [code]out_bandwidth[/code] peuvent être "
+"utilisés pour limiter la bande passante entrante et sortante, en octets par "
+"seconde. Le défaut de 0 signifie que la bande passante ne sera pas limitée. "
+"Notez que ENet ignorera stratégiquement des paquets d'une connexion entre "
+"pairs pour s'assurer que la bande passante par les pairs n'est pas dépassée. "
+"Les paramètres de bande passante déterminent également la taille de la "
+"fenêtre d'une connexion qui limite la quantité de paquets fiables qui "
+"peuvent être envoyés à tout moment donné. Retourne [constant OK] si un "
+"client a été créé, [constant ERR_ALREADY_IN_USE] si ce "
+"NetworkedMultiplayerENet a déjà une connexion ouverte (dans quel cas vous "
+"devez appeler [method close_connection] d'abord) ou [constant "
+"ERR_CANT_CREATE] si le client ne peut pas être créé. Si [code]client_port[/"
+"code] est spécifié, le client écoutera également le port donné ; ceci est "
+"utile pour certaines techniques NAT transversale."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47524,12 +48108,29 @@ msgid ""
"case you need to call [method close_connection] first) or [constant "
"ERR_CANT_CREATE] if the server could not be created."
msgstr ""
+"Créer un serveur qui écoute les connexions via [code]port[/code]. Le port "
+"doit être un port disponible et inutilisé entre 0 et 65535. Notez que les "
+"ports inférieurs à 1024 sont réservés et peuvent nécessiter des "
+"autorisations élevées en fonction de la plateforme. Pour modifier "
+"l'interface que le serveur écoute, utilisez [method set_bind_ip]. L'IP par "
+"défaut est le joker [code]\"*\"[/code], qui écoute toutes les interfaces "
+"disponibles. [code]max_clients[/code] est le nombre maximum de clients "
+"autorisés en même temps, tout nombre jusqu'à 4095 peut être utilisé, même si "
+"le nombre possible de clients simultanés peut être beaucoup plus faible et "
+"dépend de l'application. Pour plus de détails sur les paramètres de bande "
+"passante, voir [method create_client]. Retourne [constant OK] si un serveur "
+"a été créé, [constant ERR_ALREADY_IN_USE] si ce NetworkedMultiplayerENet a "
+"déjà une connexion ouverte (dans quel cas vous devez appeler [method "
+"close_connection] d'abord) ou [constant ERR_CANT_CREATE] si le serveur ne "
+"peut pas être créé."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Disconnect the given peer. If \"now\" is set to [code]true[/code], the "
"connection will be closed immediately without flushing queued messages."
msgstr ""
+"Déconnecte le pair donné. Si \"maintenant\" est [code]true[/code], la "
+"connexion sera fermée immédiatement sans envoyer les messages en attente."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47544,6 +48145,8 @@ msgid ""
"Returns the channel of the next packet that will be retrieved via [method "
"PacketPeer.get_packet]."
msgstr ""
+"Retourne le canal du prochain paquet qui sera récupéré via [method "
+"PacketPeer.get_packet]"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
#: modules/websocket/doc_classes/WebSocketServer.xml
@@ -47562,6 +48165,10 @@ msgid ""
"needs to be in IPv4 or IPv6 address format, for example: "
"[code]\"192.168.1.1\"[/code]."
msgstr ""
+"L'adresse IP utilisée lors de la création d'un serveur. Ceci est défini le "
+"joker [code]\"*\"[/code] par défaut, qui se connecte à toutes les interfaces "
+"disponibles. L'adresse donnée doit être au format IPv4 ou IPv6, par "
+"exemple : [code]\"192.168.1.1\"[/code]."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47569,6 +48176,9 @@ msgid ""
"code]. For servers, you must also setup the [CryptoKey] via [method "
"set_dtls_key]."
msgstr ""
+"Configure le [X509Certificate] à utiliser lorsque [member use_dtls] est "
+"[code]true[/code]. Pour les serveurs, vous devez également configurer le "
+"[CryptoKey] via [method set_dtls_key]."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47576,6 +48186,9 @@ msgid ""
"code]. Remember to also call [method set_dtls_certificate] to setup your "
"[X509Certificate]."
msgstr ""
+"Configure la [CryptoKey] à utiliser lorsque [member use_dtls] est "
+"[code]true[/code]. N'oubliez pas d'appeler [method set_dtls_certificate] "
+"pour configurer votre [X509Certificate]."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47590,6 +48203,17 @@ msgid ""
"other hand, defines a fixed timeout for which any packet must be "
"acknowledged or the peer will be dropped."
msgstr ""
+"Définit les paramètres de limite de temps pour un pair. Les paramètres de "
+"limite de temps contrôlent comment et quand un pair estimera que le traffic "
+"n'est pas assez fiable. Les valeurs de limite de temps sont exprimées en "
+"millisecondes.\n"
+"La [code]timeout_limit[/code] est un facteur qui, multiplié par une valeur "
+"basée sur le temps d'envoi moyen, déterminera la limite de temps pour un "
+"paquet fiable. Lorsque cette limite est atteinte, la limite de temps sera "
+"doublée, et le pair sera déconnecté si cette limite atteint "
+"[code]timeout_min[/code]. Le paramètre [code]timeout_max[/code], d'autre "
+"part, définit une limite de temps fixe pour lequel tout paquet doit estimé "
+"comme fiable, ou alors le pair sera supprimé."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47598,6 +48222,11 @@ msgid ""
"NetworkedMultiplayerPeer.TRANSFER_MODE_UNRELIABLE_ORDERED]). This is the "
"only way to use ordering with the RPC system."
msgstr ""
+"Force le tri des paquets lors de l'utilisation de [constant "
+"NetworkedMultiplayerPeer.TRANSFER_MODE_UNRELIABLE] (ce qui se comporte de la "
+"même manière [constant NetworkedMultiplayerPeer."
+"TRANSFER_MODE_UNRELIABLE_ORDERED]). C'est le seul moyen d'utiliser le tri "
+"avec un système RPC."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47608,6 +48237,12 @@ msgid ""
"status of a packet in one channel won't stall the delivery of other packets "
"in another channel."
msgstr ""
+"Le nombre de canaux à utiliser par ENet. Les canaux sont utilisés pour "
+"séparer différents types de données. En mode fiable ou ordonné, par exemple, "
+"l'ordre d'envoi des paquets est assuré sur une base par canal. Ceci est fait "
+"pour lutter contre la latence et réduit les restrictions d'ordre sur les "
+"paquets. L'état d'envoi d'un paquet d'un canal a été décalé dans l'envoi "
+"d'autres paquets dans un autre canal."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47624,6 +48259,21 @@ msgid ""
"COMPRESS_NONE]. Nonetheless, mixing engine versions between clients and "
"server is not recommended and not officially supported."
msgstr ""
+"La méthode de compression utilisée pour les paquets réseau. Ceux-ci ont "
+"différents compromis de vitesse de compression par rapport à la bande "
+"passante, vous pouvez avoir besoin quelle méthode fonctionne le mieux pour "
+"votre cas d'utilisation si vous utilisez la compression pour tout.\n"
+"[b]Note :[/b] La conception réseau de la plupart des jeux nécessite l'envoi "
+"de nombreux petits paquets fréquemment (moins de 4 KB chacun). Dans le "
+"doute, il est recommandé de garder l'algorithme de compression par défaut "
+"car il fonctionne le mieux avec ces petits paquets.\n"
+"[b]Note :[/b] [member compression_mode] doit être défini à la même valeur "
+"sur le serveur et sur tous ses clients. Les clients ne se connecteront pas "
+"si le [member compression_mode] d'un client diffère de celui du serveur. "
+"Avant Godot 3.4, la valeur par défaut de [member compression_mode] était "
+"[constant COMPRESS_NONE]. Néanmoins, il n'est pas recommandé, ni "
+"officiellement supporté, d'utiliser différentes versions du moteur entre les "
+"clients et le serveur."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47632,6 +48282,10 @@ msgid ""
"When set to an empty string, the [code]address[/code] parameter passed to "
"[method create_client] is used instead."
msgstr ""
+"Le nom d'hôte utilisé pour la vérification DTLS, à comparer à la valeur « CN "
+"» du certificat fourni par le serveur.\n"
+"Si la chaîne est vide, le paramètre [code]address[/code] passé à [method "
+"create_client] est utilisé à la place."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
#, fuzzy
@@ -47649,6 +48303,11 @@ msgid ""
"is [code]false[/code], clients won't be automatically notified of other "
"peers and won't be able to send them packets through the server."
msgstr ""
+"Activer ou désactiver la fonction serveur qui notifie les clients de la "
+"connexion/déconnection des autres pairs enregistrés, et relaye les messages "
+"entre eux. Lorsque cette option est [code]false[/code], les clients ont "
+"obtenu la notification automatique d'autres pairs et ont obtenu la "
+"possibilité de les envoyer par le serveur."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47660,6 +48319,14 @@ msgid ""
"that channel for sending data. See [member channel_count] for more "
"information about ENet channels."
msgstr ""
+"Définit le canal par défaut à utiliser pour transférer les données. Par "
+"défaut, cette valeur est [code]-1[/code] ce qui signifie que ENet "
+"n'utilisera que 2 canaux : un pour les paquets fiables, et un pour les "
+"paquets non fiables. Le canal [code]0[/code] est réservé et ne peut pas être "
+"utilisé. Définit cette propriété à n'importe quelle valeur entre [code]0[/"
+"code] et [member channel_count] (exclus) forcera ENet à utiliser ce canal "
+"pour envoyer les données. Voir [member channel_count] pour plus "
+"d'informations sur les canaux ENet."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47673,6 +48340,16 @@ msgid ""
"dtls_verify] option, and configure the certificate accordingly via [method "
"set_dtls_certificate]."
msgstr ""
+"Quand activé, le client ou le serveur créé par ce pair utilisera "
+"[PacketPeerDTLS] au lieu des sockets UDP bruts pour communiquer avec le pair "
+"distant. Cela permettra de chiffrer la communication avec DTLS avec une "
+"utilisation plus importante des ressources mais aussi peut-être de la taille "
+"des paquets.\n"
+"[b]Note :[/b] Lors de la création d'un serveur DTLS, assurez-vous de "
+"configurer à la fois la clé et le certificat avec [method set_dtls_key] et "
+"[method set_dtls_certificate]. Pour les clients DTLS, regardez l'option "
+"[member dtls_verify] et configurez le certificat en conséquence avec [method "
+"set_dtls_certificate]."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47680,12 +48357,17 @@ msgid ""
"requiring the fewest CPU resources. This option may also be used to make "
"network debugging using tools like Wireshark easier."
msgstr ""
+"Aucune compression. Cela utilise le plus de bande passante, mais moins de "
+"ressource du CPU. Cette option peut également être utilisée pour faciliter "
+"le débogage du réseau en utilisant des outils comme Wireshark."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"ENet's built-in range encoding. Works well on small packets, but is not the "
"most efficient algorithm on packets larger than 4 KB."
msgstr ""
+"L'encodage intégré d'ENet. Fonctionne bien sur les petits paquets, mais "
+"n'est pas l'algorithme le plus efficace pour les paquets de plus de 4 KB."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47693,6 +48375,9 @@ msgid ""
"resources compared to [constant COMPRESS_ZLIB], at the expense of using more "
"bandwidth."
msgstr ""
+"L'algorithme de compression [url=http://fastlz.org/]FastLZ[/url]. Cette "
+"option utilise moins de ressources CPU par rapport à [constant "
+"COMPRESS_ZLIB] mais utilise plus de bande passante."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -47702,6 +48387,11 @@ msgid ""
"packets smaller than 4 KB. Therefore, it's recommended to use other "
"compression algorithms in most cases."
msgstr ""
+"L'algorithme de compression [url=https://www.zlib.net/]Zlib[/url]. Cette "
+"option utilise moins de bande passante par rapport à [constant "
+"COMPRESS_FASTLZ] mais utilise plus le CPU. Notez que cet algorithme n'est "
+"pas très efficace pour les paquets de moins de 4 KB. Il est donc souvent "
+"recommandé d'utiliser d'autres algorithmes de compression."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression."
@@ -47721,6 +48411,11 @@ msgid ""
"detail and isn't meant to be used by non-Godot servers. It may change "
"without notice."
msgstr ""
+"Gère la connexion aux pairs du réseau. Attribue des identifiants uniques à "
+"chaque client connecté au serveur. Voir aussi [MultiplayerAPI].\n"
+"[b]Note :[/b] Le protocole de l'API multijoueur de haut niveau dépend de son "
+"implémentation et n'est pas destiné à être utilisé par des serveurs en "
+"dehors de Godot. Ce protocole peut changer dans une future version."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "High-level multiplayer"
@@ -47728,7 +48423,7 @@ msgstr "API multijoueur de haut niveau"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "WebRTC Signaling Demo"
-msgstr ""
+msgstr "Démo des signaux WebRTC"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -47760,6 +48455,13 @@ msgid ""
"peer ID to send to all peers except that one. By default, the target peer is "
"[constant TARGET_PEER_BROADCAST]."
msgstr ""
+"Définit le pair auquel les paquets seront envoyés.\n"
+"L'identifiant [code]id[/code] peut être : [constant TARGET_PEER_BROADCAST] "
+"pour envoyer à tous les pairs connectés, [constant TARGET_PEER_SERVER] pour "
+"envoyer au pair agissant en tant que serveur, un identifiant de pairs valide "
+"pour envoyer à ce pair spécifique, ou un identifiant négatif pour envoyer à "
+"tous les pairs sauf celui-ci. Par défaut, le pair cible est [constant "
+"TARGET_PEER_BROADCAST]."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -47774,6 +48476,8 @@ msgid ""
"The manner in which to send packets to the [code]target_peer[/code]. See "
"[enum TransferMode]."
msgstr ""
+"La manière d'envoyer des paquets au [code]target_peer[/code]. Voir [enum "
+"TransferMode]."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Emitted when a connection attempt fails."
@@ -47802,6 +48506,11 @@ msgid ""
"TRANSFER_MODE_UNRELIABLE_ORDERED]. Use for non-critical data, and always "
"consider whether the order matters."
msgstr ""
+"Les paquets ne sont pas reconnus, aucune tentative de ré-envoi n'est faite "
+"pour les paquets perdus. Les paquets peuvent arriver dans n'importe quelle "
+"commande. Peut être plus rapide que [constant "
+"TRANSFER_MODE_UNRELIABLE_ORDERED]. À utiliser pour des données non "
+"critiques, et toujours à considérer si l'ordre compte."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -47811,6 +48520,12 @@ msgid ""
"would be outdated if received late due to resend attempt(s) anyway, for "
"example movement and positional data."
msgstr ""
+"Les paquets ne sont pas reconnus, aucune tentative de ré-envoi n'est faite "
+"pour les paquets perdus. Les paquets sont reçus dans l'ordre où ils ont été "
+"envoyés. Peut être plus rapide que [constant TRANSFER_MODE_RELIABLE]. À "
+"utiliser pour les données non critiques ou qui seraient périmées si elles "
+"étaient reçues tardivement à cause du ré-envoi, par exemple pour les données "
+"de mouvement et de positionnement."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -47821,6 +48536,14 @@ msgid ""
"order, for example an ability being triggered or a chat message. Consider "
"carefully if the information really is critical, and use sparingly."
msgstr ""
+"Les paquets doivent être reçus et les tentatives de ré-envoi doivent être "
+"faites jusqu'à ce que les paquets soient reconnus. Les paquets doivent être "
+"reçus dans l'ordre où ils ont été envoyés. C'est le mode de transfert le "
+"plus fiable, mais potentiellement le plus lent en cause de la surcharge. À "
+"utiliser pour les données critiques qui doivent être transmises et arriver "
+"en ordre, par exemple un élément activé ou un message de discussion. À "
+"considérez soigneusement si l'information est vraiment critique, et à "
+"utiliser avec parcimonie."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "The ongoing connection disconnected."
@@ -47862,30 +48585,40 @@ msgid ""
"Returns the size of the margin identified by the given [enum Margin] "
"constant."
msgstr ""
+"Retourne la taille de la marge identifiée par la constante [enum Margin] "
+"donnée."
#: doc/classes/NinePatchRect.xml
msgid ""
"Sets the size of the margin identified by the given [enum Margin] constant "
"to [code]value[/code] in pixels."
msgstr ""
+"Définit la taille de la marge identifiée par la constante [enum Margin] "
+"donnée à [code]value[/code] en pixels."
#: doc/classes/NinePatchRect.xml
msgid ""
"The stretch mode to use for horizontal stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
+"Le mode d'étirement à utiliser pour l'étirement horizontal. Voir [enum "
+"NinePatchRect.AxisStretchMode] pour les valeurs possibles."
#: doc/classes/NinePatchRect.xml
msgid ""
"The stretch mode to use for vertical stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
+"Le mode d'étirement à utiliser pour l'étirement vertical. Voir [enum "
+"NinePatchRect.AxisStretchMode] pour les valeurs possibles."
#: doc/classes/NinePatchRect.xml
msgid ""
"If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's "
"borders."
msgstr ""
+"Si [code]true[/code], dessine le centre du panneau. Sinon, ne dessine que "
+"les bordures des 9 parties."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47893,6 +48626,10 @@ msgid ""
"bottom corners and side will have a height of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
+"La hauteur de la ligne du bas des 9 parties. Une marge de 16 signifie que "
+"les angles du bas des 9 parties et les côtés auront une hauteur de 16 "
+"pixels. Vous pouvez définir les 4 valeurs de marge individuellement pour "
+"créer des panneaux avec des bordures non uniformes."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47900,6 +48637,10 @@ msgid ""
"left corners and side will have a width of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
+"La largeur de la colonne gauche des 9 parties. Une marge de 16 signifie que "
+"les angles de gauche des 9 parties et les côtés auront une largeur de 16 "
+"pixels. Vous pouvez définir les 4 valeurs de marge individuellement pour "
+"créer des panneaux avec des bordures non uniformes."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47907,6 +48648,10 @@ msgid ""
"right corners and side will have a width of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
+"La largeur de la colonne droite de 9 parties. Une marge de 16 signifie que "
+"les angles de droite des 9 parties et le côté auront une largeur de 16 "
+"pixels. Vous pouvez définir les 4 valeurs de marge individuellement pour "
+"créer des panneaux avec des bordures non uniformes."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47914,6 +48659,10 @@ msgid ""
"corners and side will have a height of 16 pixels. You can set all 4 margin "
"values individually to create panels with non-uniform borders."
msgstr ""
+"La hauteur de la ligne du haut de 9 parties. Une marge de 16 signifie que "
+"les angles du haut des 9 parties et le côté auront une hauteur de 16 pixels. "
+"Vous pouvez définir les 4 valeurs de marge individuellement pour créer des "
+"panneaux avec des bordures non uniformes."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47922,6 +48671,10 @@ msgid ""
"other properties are relative to this one. If the rect is empty, "
"NinePatchRect will use the whole texture."
msgstr ""
+"La région rectangulaire de la texture à utiliser. Si vous travaillez avec un "
+"atlas, utilisez cette propriété pour définir la zone à utiliser. Toutes les "
+"autres propriétés sont par rapport à celle-ci. Si le rectangle est vide, le "
+"NinePatchRect utilisera la texture dans son entièreté."
#: doc/classes/NinePatchRect.xml
msgid "The node's texture resource."
@@ -47936,6 +48689,8 @@ msgid ""
"Stretches the center texture across the NinePatchRect. This may cause the "
"texture to be distorted."
msgstr ""
+"Étire la texture du centre sur tout le NinePatchRect. Cela peut entraîner "
+"une distorsion de cette texture."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47945,6 +48700,11 @@ msgid ""
"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
msgstr ""
+"Répète la texture centrale sur tout le NinePatchRect. Cela ne provoque "
+"aucune distorsion visible. La texture doit être transparente pour que cela "
+"fonctionne sans afficher d'artefacts entre les bords.\n"
+"[b]Note :[/b] Seulement pris en charge avec GLES3. Avec GLES2, cela se "
+"comportera comme [constant AXIS_STRETCH_MODE_STRETCH]."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -47956,6 +48716,13 @@ msgid ""
"[b]Note:[/b] Only supported when using the GLES3 renderer. When using the "
"GLES2 renderer, this will behave like [constant AXIS_STRETCH_MODE_STRETCH]."
msgstr ""
+"Répète la texture centrale sur tout le NinePatchRect, mais étirera également "
+"la texture pour s'assurer que chaque tuile est visible entièrement. Cela "
+"peut causer une distorsion de la texture, mais moins que [constant "
+"AXIS_STRETCH_MODE_STRETCH]. La texture doit être transparente pour que cela "
+"fonctionne sans afficher d'artefacts entre les bords.\n"
+"[b]Note :[/b] Seulement pris en charge avec GLES3. Avec GLES2, cela se "
+"comportera comme [constant AXIS_STRETCH_MODE_STRETCH]."
#: doc/classes/Node.xml
msgid "Base class for all [i]scene[/i] objects."
@@ -48021,6 +48788,69 @@ msgid ""
"(make sure node names are the same on all peers). Also, take a look at the "
"high-level networking tutorial and corresponding demos."
msgstr ""
+"Les nœuds sont les blocs de construction de Godot. Ils peuvent être assignés "
+"comme enfant d'un autre nœud, ce qui entraîne définit l'arborescence. Un "
+"nœud donné peut contenir n'importe quel nombre de nœuds enfants mais tous "
+"ces enfants doivent avoir des noms différents.\n"
+"Une arborescence de nœuds est appelé une [i]scène[/i]. Les scènes peuvent "
+"être sauvegardées sur le disque et ensuite instanciées dans d'autres scènes. "
+"Cela permet une très grande flexibilité dans l'architecture et le modèle de "
+"données des projets Godot.\n"
+"[b]Arbre de scène :[/b] Le [SceneTree] contient l'arborescence des nœuds. "
+"Lorsqu'un nœud est ajouté à l'arborescence de scène, il reçoit la "
+"notification [constant NOTIFICATION_ENTER_TREE] et sa méthode [method "
+"enter_tree] est appelée. Les nœuds d'enfants sont toujours ajoutés [i]après[/"
+"i] leur nœud parent, c'est-à-dire la méthode [method enter_tree] d'un nœud "
+"parent sera appelée avant celle de son enfant.\n"
+"Une fois que tous les nœuds ont été ajoutés dans l'arborescence de la scène, "
+"ils reçoivent la notification [constante NOTIFICATION_READY] et leurs "
+"méthodes respectives [method _ready] sont appelées. Pour les groupes de "
+"nœuds, la méthode [method _ready] est appelée avec un ordre inversé, en "
+"commençant par les enfants et en allant jusqu'aux nœuds parent.\n"
+"Cela signifie qu'en ajoutant un nœud à l'arborescence de la scène, l'ordre "
+"suivant sera utilisé pour les appels des méthodes: [method enter_tree] du "
+"parent, [method enter_tree] des enfants, [method _ready] des enfants et "
+"enfin [method _ready] du parent (recursivement pour l'arborescence complète "
+"de la scène).\n"
+"[b]Processus :[/b] Les nœuds peuvent surcharger l'état du processus, de "
+"sorte qu'ils reçoivent un appel à chaque trame demandant un traitement (de "
+"faire quelque chose). Le traitement normal (la méthode [method _process], "
+"activée avec [method set_process]) se produit aussi vite que possible et "
+"dépend du nombre de trames par seconde, de sorte que le temps de traitement "
+"[i]delta[/i] (en secondes) est passé en argument. Le traitement physique (la "
+"méthode [method physical_process], activée avec [method "
+"set_physics_process]) est appelée un nombre fixe de fois par seconde (60 "
+"fois par défaut) et est utile pour le code lié au moteur physique.\n"
+"Les nœuds peuvent également traiter les événements d'entrée. À l'heure "
+"actuelle, la fonction [method _input] sera appelée pour chaque entrée que le "
+"programme reçoit. Dans de nombreux cas, cela peut faire trop d'informations "
+"(sauf pour des projets simples), et la fonction [method unhandled_input] "
+"peut être préférée ; elle est appelée lorsque l'événement d'entrée n'a été "
+"traité par aucun élément (généralement, des nœuds d'interface [Control]), "
+"pour s'assurer que le nœud ne reçoit que les événements qui lui sont "
+"destinés.\n"
+"Pour garder la trace de l'arborescence de la scène (surtout lorsque vous "
+"instanciez des scènes dans d'autres scènes), un \"propriétaire\" peut être "
+"défini pour le nœud avec la propriété [member owner]. Cela garde une trace "
+"de quel élément a instancié quel autre élément. Cela est surtout utile "
+"lorsque vous écrivez des éditeurs et des outils.\n"
+"Enfin, quand un nœud est libéré avec [method Object.free] ou [method "
+"queue_free], il va également libérer tous ses enfants.\n"
+"[b]Les groupes : [/b] Les nœuds peuvent être ajoutés à autant de groupes que "
+"vous voulez, vous pouvez créer des groupes comme « ennemis » ou « "
+"récupérables » par exemple, selon votre jeu. Voir [method add_to_group], "
+"[method is_in_group] et [method remove_from_group]. Vous pouvez ensuite "
+"récupérer tous les nœuds d'un groupe, lister les groupes et même appeler des "
+"méthodes sur les groupes via des méthodes de [SceneTree].\n"
+"[b]Faire communiquer les nœud via le réseau :[/b] Après s'être connecté à un "
+"serveur (ou en faire un, voir [NetworkedMultiplayerENet]), il est possible "
+"d'utiliser le système RPC intégré (\"Remote Procedure Call\") pour "
+"communiquer sur le réseau. En appelant [method rpc] avec un nom de méthode, "
+"il sera appelé localement et pour tous les pairs connectés (un pair = un "
+"client et le serveur qui accepte les connexions). Pour identifier quel nœud "
+"reçoit l'appel RPC, Godot utilisera son [NodePath] (s'assurant que les noms "
+"de nœuds sont les mêmes sur tous les pairs). Consultez également le tutoriel "
+"pour les réseaux à haut niveau et les démos correspondantes."
#: doc/classes/Node.xml
msgid "Nodes and Scenes"
@@ -48039,6 +48869,12 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_ENTER_TREE] notification in "
"[method Object._notification]."
msgstr ""
+"Appelé lorsque le nœud entre dans la [SceneTree] (par exemple en étant "
+"instancié, au changement de scène, ou après avoir appelé [method add_child] "
+"dans un script). Si le nœud a des enfants, sa méthode [méthod enter_tree] "
+"sera appelée d'abord, puis ensuite celle de ses enfants.\n"
+"Correspond à la notification [constant NOTIFICATION_ENTER_TREE] dans [method "
+"Object._notification]"
#: doc/classes/Node.xml
msgid ""
@@ -48051,6 +48887,15 @@ msgid ""
"the node has already left the active tree, connect to the [signal "
"tree_exited]."
msgstr ""
+"Appelé lorsque le nœud va quitter la [SceneTree] (par exemple sur la "
+"suppression, au changement de scène, ou après avoir appelé [method "
+"remove_child] dans un script). Si le nœud a des enfants, sa méthode [method "
+"exit_tree] sera appelée en dernier, quand tous ses enfants auront quitté "
+"l'arborescence.\n"
+"Correspond à la notification [constant NOTIFICATION_EXIT_TREE] dans [method "
+"Object._notification] et signal [signal tree_exiting]. Pour être notifié "
+"lorsque le nœud a déjà quitté l'arborescence active, connectez-vous à "
+"[signal tree_exited]."
#: doc/classes/Node.xml
msgid ""
@@ -48060,6 +48905,12 @@ msgid ""
"Call [method update_configuration_warning] when the warning needs to be "
"updated for this node."
msgstr ""
+"La chaîne retournée de cette méthode est affichée comme un avertissement "
+"dans la barre d'outil Scène si le script qui la modifie est un script "
+"[code]tool[/code].\n"
+"Retourner une chaîne vide ne produit aucun avertissement.\n"
+"Appelez [method update_configuration_warning] lorsque l'avertissement doit "
+"être mis à jour pour ce nœud."
#: doc/classes/Node.xml
msgid ""
@@ -48158,6 +49009,21 @@ msgid ""
"call with [method request_ready], which may be called anywhere before adding "
"the node again."
msgstr ""
+"Appelé lorsque le nœud est « prêt », c'est-à-dire lorsque le nœud et ses "
+"enfants sont entrés dans l'arborescence de la scène. Si le nœud a des "
+"enfants, leur méthode [method _ready] sera appelée en premier, et le nœud "
+"parent recevra la notification après.\n"
+"Correspond à la notification [constant NOTIFICATION_READY] dans [method "
+"Object._notification]. Voir aussi le mot-clé [code]onready[/code] pour les "
+"variables.\n"
+"Habituellement utilisé pour l'initialisation. Pour encore avant cela, "
+"[method Object._init] peut être utilisé. Voir aussi [méthod enter_tree].\n"
+"[b]Note :[/b] [method _ready] ne peut être appelée qu'une seule fois pour "
+"chaque nœud. Après avoir retiré un nœud de l'arborescence de scène et "
+"l'ajouter à nouveau, [code]_ready[/code] ne sera pas appelé une deuxième "
+"fois. Cela peut être changé en demandant un autre appel avec [method "
+"request_ready], qui peut être appelé n'importe où avant d'ajouter le nœud à "
+"nouveau."
#: doc/classes/Node.xml
msgid ""
@@ -48247,6 +49113,30 @@ msgid ""
"will not be visible in the scene tree, though it will be visible in the "
"2D/3D view."
msgstr ""
+"Ajoute un nœud enfant. Les nœuds peuvent avoir autant d'enfants que voulu, "
+"mais chaque enfant doit avoir un nom unique. Les nœuds d'enfants sont "
+"automatiquement supprimés lorsque le nœud parent est supprimé, de sorte "
+"qu'une scène entière peut être supprimée en supprimant juste son nœud le "
+"plus haut.\n"
+"Si [code]legible_unique_name[/code] est [code]true[/code], le nœud d'enfant "
+"aura un nom clairement lisible basé sur le nom du nœud étant analysé au lieu "
+"de son type.\n"
+"[b]Note :[/b] Si le nœud enfant a déjà un parent, la fonction échouera. "
+"Utilisez [method remove_child] d'abord pour retirer le nœud de son parent "
+"actuel. Par exemple :\n"
+"[codeblock]\n"
+"if child_node.get_parent():\n"
+" child_node.get_parent().remove_child(child_node)\n"
+"add_child(child_node)\n"
+"[/codeblock]\n"
+"[b]Note :[/b] Si vous voulez qu'un enfant soit persiste dans un "
+"[PackedScene], vous devez définir [member owner] après avoir appelé [method "
+"add_child]. Ceci est généralement pertinent pour [url=$DOCS_URL/tutorials/"
+"plugins/running_code_in_the_editor.html]scripts d'outil[/url] et "
+"[url=$DOCS_URL/tutorials/plugins/editor/index.html]greffons d'éditeur[/url]. "
+"Si [method add_child] est appelé sans définir [member owner], le nouveau "
+"[Node] ajouté ne sera pas visible dans l'arborescence de la scène, bien "
+"qu'il sera visible dans la vue 2D/3D."
#: doc/classes/Node.xml
msgid ""
@@ -48256,6 +49146,10 @@ msgid ""
"will have a human-readable name based on the name of the node being "
"instanced instead of its type."
msgstr ""
+"Ajoute [code]child_nœud[/code] en tant qu'enfant. L'enfant est placé sous le "
+"[code]nœud[/code] donné dans la liste des enfants.\n"
+"Si [code]legible_unique_name[/code] est [code]true[/code], le nœud d'enfant "
+"aura un nom lisible humainement basé sur le nom du nœud plutôt que son type."
#: doc/classes/Node.xml
msgid ""
@@ -48278,6 +49172,10 @@ msgid ""
"scene tree is not paused, and [code]false[/code] if the node is not in the "
"tree."
msgstr ""
+"Retourne [code]true[/code] si le nœud peut traiter pendant que "
+"l'arborescence de scène est interrompue (voir [member pause_mode)]. Retourne "
+"toujours [code]true[/code] si l'arborescence de scène n'est pas interrompue, "
+"et [code]false[/code] si le nœud n'est pas dans l'arborescence."
#: doc/classes/Node.xml
msgid ""
@@ -48287,6 +49185,10 @@ msgid ""
"get_tree().create_tween().bind_node(self)\n"
"[/codeblock]"
msgstr ""
+"Crée un nouveau [SceneTreeTween] et le lie à ce nœud. Cela équivaut à :\n"
+"[codeblock]\n"
+"get_tree().create_tween().bind_node(self)\n"
+"[/codeblock]"
#: doc/classes/Node.xml
msgid ""
@@ -48297,6 +49199,13 @@ msgid ""
"constructor arguments (i.e. needs to supply arguments to [method Object."
"_init] method). In that case, the node will be duplicated without a script."
msgstr ""
+"Duplique le nœud, retournant un nouveau nœud.\n"
+"Vous pouvez affiner le comportement en utilisant des drapeaux dans "
+"[code]flags[/code] (voir [enum DuplicateFlags)].\n"
+"[b]Note :[/b] Ça ne fonctionnera pas correctement si le nœud contient un "
+"script avec des arguments de constructeur (c'est-à-dire qu'on doit fournir "
+"des arguments à la méthode [method Object._init]). Dans ce cas, le nœud sera "
+"dupliqué sans script."
#: doc/classes/Node.xml
msgid ""
@@ -48315,6 +49224,23 @@ msgid ""
"consider using [method get_node] instead. To avoid using [method find_node] "
"too often, consider caching the node reference into a variable."
msgstr ""
+"Trouve un descendant de ce nœud dont le nom correspond à [code]mask[/code] "
+"suivant le même fonctionnement que pour [method String.match] (c'est-à-dire "
+"sensible à la casse, que [code]\"*\"[/code] correspond à un zéro au un seul "
+"caractère, et que [code]\"?\"[/code] correspond à n'importe quel unique "
+"caractère sauf [code]\".\"[/code]). Retourne [code]null[/code] si aucun "
+"[Node] correspondant n'est trouvée.\n"
+"[b]Note :[/b] La correspondance ne se fait pas sur le chemin complet mais "
+"juste les noms des nœuds.\n"
+"Si [code]owned[/code] est [code]true[/code], cette méthode ne trouve que des "
+"nœuds dont le propriétaire est ce nœud. Ceci est particulièrement important "
+"pour les scènes instanciée par un script, parce que ces scènes n'ont pas de "
+"propriétaire.\n"
+"[b]Note :[/b] Comme cette méthode liste tous les descendants d'un nœud, "
+"c'est le moyen le plus lent d'obtenir une référence à un autre nœud. Dans la "
+"mesure du possible, essayez plutôt d'utiliser [method get_node]. Pour éviter "
+"d'utiliser [method find_node] trop souvent, essayez de mettre en chache la "
+"référence de ce nœud dans une variable."
#: doc/classes/Node.xml
msgid ""
@@ -48329,6 +49255,23 @@ msgid ""
"[method get_node] instead. To avoid using [method find_parent] too often, "
"consider caching the node reference into a variable."
msgstr ""
+"Trouve un parent de ce nœud dont le nom correspond à [code]mask[/code] "
+"suivant le même fonctionnement que pour [method String.match] (c'est-à-dire "
+"sensible à la casse, que [code]\"*\"[/code] correspond à un zéro au un seul "
+"caractère, et que [code]\"?\"[/code] correspond à n'importe quel unique "
+"caractère sauf [code]\".\"[/code]). Retourne [code]null[/code] si aucun "
+"[Node] correspondant n'est trouvée.\n"
+"[b]Note :[/b] La correspondance ne se fait pas sur le chemin complet mais "
+"juste les noms des nœuds.\n"
+"Si [code]owned[/code] est [code]true[/code], cette méthode ne trouve que des "
+"nœuds dont le propriétaire est ce nœud. Ceci est particulièrement important "
+"pour les scènes instanciée par un script, parce que ces scènes n'ont pas de "
+"propriétaire.\n"
+"[b]Note :[/b] Comme cette méthode liste tous les parents d'un nœud, c'est le "
+"moyen le plus lent d'obtenir une référence à un autre nœud. Dans la mesure "
+"du possible, essayez plutôt d'utiliser [method get_node]. Pour éviter "
+"d'utiliser [method find_node] trop souvent, essayez de mettre en chache la "
+"référence de ce nœud dans une variable."
#: doc/classes/Node.xml
msgid ""
@@ -48336,6 +49279,9 @@ msgid ""
"method is often used for iterating all children of a node.\n"
"To access a child node via its name, use [method get_node]."
msgstr ""
+"Retourne un nœud enfant par son index (voir [method get_child_count)]. Cette "
+"méthode est souvent utilisée pour itérer tous les enfants d'un nœud.\n"
+"Pour accéder à un nœud enfant par son nom, utilisez [method get_node]."
#: doc/classes/Node.xml
msgid "Returns the number of child nodes."
@@ -48363,17 +49309,38 @@ msgid ""
" non_internal_groups.push_back(group)\n"
"[/codeblock]"
msgstr ""
+"Retourne un tableau énumérant les groupes dont ce nœud est membre.\n"
+"[b]Note :[/b] Pour des raisons de performance, l'ordre des groupes de nœuds "
+"n'est [i]pas[/i] garanti. cet ordre des groupes de nœuds ne devrait pas être "
+"utilisé car il peut varier entre les différents projets.\n"
+"[b]Note :[/b] Le moteur utilise des noms de groupe en l'interne (tous "
+"commençent par \"_\"). Pour éviter les conflits avec des groupes internes, "
+"n'ajoutez pas de groupes personnalisés dont le nom commence par \"_\". Pour "
+"exclure les groupes internes en boucle sur [method get_groups], utiliser le "
+"code suivant:\n"
+"[codeblock]\n"
+"# Enregistre tous les nœuds des groupes non internes au moteur (dans un "
+"tableau de String).\n"
+"var non_internal_groups = []\n"
+"for group in get_groups():\n"
+" if not group.begins_with(\"_\"):\n"
+" non_internal_groups.push_back(group)\n"
+"[/codeblock]"
#: doc/classes/Node.xml
msgid ""
"Returns the node's index, i.e. its position among the siblings of its parent."
msgstr ""
+"Retourne l'indice du nœud, c'est-à-dire sa position parmi les enfants de son "
+"parent."
#: doc/classes/Node.xml
msgid ""
"Returns the peer ID of the network master for this node. See [method "
"set_network_master]."
msgstr ""
+"Retourne l'identifiant du pair du maître du réseau pour ce nœud. Voir "
+"[method set_network_master]."
#: doc/classes/Node.xml
msgid ""
@@ -48452,12 +49419,33 @@ msgid ""
"[[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]\n"
"[/codeblock]"
msgstr ""
+"Récupère un nœud et une de ses ressources comme spécifié par le sous-nom de "
+"son [NodePath] (ex.: [code]Area2D/CollisionShape2D:shape[/code)]. Si "
+"plusieurs ressources imbriquées sont spécifiées dans le [NodePath], seul le "
+"dernier sera récupéré.\n"
+"La valeur de retour est un tableau de 3 éléments : le premier élément est le "
+"[Node] (ou [code]null[/code] s'il n'est pas trouvé), le deuxième élément est "
+"la [Resource] (ou [code]null[/code] si elle n'est pas trouvée), et le "
+"troisième élément est le reste du [NodePath], le cas échéant.\n"
+"Par exemple, en supposant que [code]Area2D/CollisionShape2D[/code] est un "
+"nœud valide et que sa propriété [code]shape[/code] a été assignée à une "
+"ressource [RectangleShape2D], on pourrait avoir ce type de sortie:\n"
+"[codeblock]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D\")) # "
+"[[CollisionShape2D:1161], Null, ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], ]\n"
+"print(get_node_and_resource(\"Area2D/CollisionShape2D:shape:extents\")) # "
+"[[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]\n"
+"[/codeblock]"
#: doc/classes/Node.xml
msgid ""
"Similar to [method get_node], but does not log an error if [code]path[/code] "
"does not point to a valid [Node]."
msgstr ""
+"Semblable à [method get_node], mais n'affiche pas d'erreur si [code]path[/"
+"code] ne pointe pas vers une valeur valide [Node]."
#: doc/classes/Node.xml
msgid ""
@@ -48472,12 +49460,18 @@ msgid ""
"Returns the absolute path of the current node. This only works if the "
"current node is inside the scene tree (see [method is_inside_tree])."
msgstr ""
+"Retourne le chemin absolu du nœud actuel. Cela ne fonctionne que si le nœud "
+"actuel est à l'intérieur de l'arborescence de la scène (voir [method "
+"is_inside_tree)]."
#: doc/classes/Node.xml
msgid ""
"Returns the relative [NodePath] from this node to the specified [code]node[/"
"code]. Both nodes must be in the same scene or the function will fail."
msgstr ""
+"Retourne le chemin [NodePath] relatif de ce nœud par rapport au nœud "
+"[code]nœud[/code] spécifié. Les deux nœuds doivent être dans la même scène "
+"sinon la fonction échouera."
#: doc/classes/Node.xml
msgid ""
@@ -48486,18 +49480,26 @@ msgid ""
"processing unless the frames per second is changed via [member Engine."
"iterations_per_second]."
msgstr ""
+"Retourne le temps écoulé (en secondes) depuis la dernière trame physique "
+"(voir [method _physics_process]). C'est toujours une valeur constante dans "
+"le traitement de la physique à moins que les trames par seconde ne soient "
+"changés via [member Engine.iterations_per_second]"
#: doc/classes/Node.xml
msgid ""
"Returns the node's order in the scene tree branch. For example, if called on "
"the first child node the position is [code]0[/code]."
msgstr ""
+"Retourne l'ordre du nœud dans la branche de la scène. Par exemple, si on "
+"l'appelle sur le premier nœud enfant, la position est [code]0[/code]."
#: doc/classes/Node.xml
msgid ""
"Returns the time elapsed (in seconds) since the last process callback. This "
"value may vary from frame to frame."
msgstr ""
+"Retourne le temps écoulé (en secondes) depuis le dernier rappel de process. "
+"Cette valeur peut varier d'une trame à l'autre."
#: doc/classes/Node.xml
msgid ""
@@ -48528,12 +49530,19 @@ msgid ""
"shape[/code]. Properties with a non-[Resource] type (e.g. nodes or primitive "
"math types) are not considered resources."
msgstr ""
+"Retourne [code]true[/code] si le [NodePath] désigne un nœud valide et son "
+"sous-nom désigne une ressource valide, par exemple [code]Area2D/"
+"CollisionShape2D:shape[/code]. Les propriétés avec un type qui n'est pas une "
+"[Resource] (par exemple les nœuds ou les types mathématiques primitifs) ne "
+"sont pas considérées comme des ressources."
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if the given node is a direct or indirect child of "
"the current node."
msgstr ""
+"Retourne [code]true[/code] si le nœud donné est un enfant direct ou indirect "
+"du nœud actuel."
#: doc/classes/Node.xml
msgid ""
@@ -48554,6 +49563,8 @@ msgid ""
"Returns [code]true[/code] if this node is in the specified group. See notes "
"in the description, and the group methods in [SceneTree]."
msgstr ""
+"Retourne [code]true[/code] si ce nœud est dans le groupe spécifié. Voir les "
+"notes dans la description, et les méthodes de groupe dans [SceneTree]."
#: doc/classes/Node.xml
msgid ""
@@ -48565,6 +49576,7 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if the local system is the master of this node."
msgstr ""
+"Retourne [code]true[/code] si le système local est le maître de ce nœud."
#: doc/classes/Node.xml
msgid ""
@@ -48574,6 +49586,11 @@ msgid ""
"[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can "
"be tested using [method is_physics_interpolated_and_enabled]."
msgstr ""
+"Retourne [code]true[/code] si le drapeau interpolé de la physique est défini "
+"pour ce nœud (voir [member physics_interpolation_mode)].\n"
+"[b]Note :[/b] L'interpolation ne sera active que si le drapeau est défini "
+"[b]et[/b] que l'interpolation physique est activée dans [SceneTree]. Ceci "
+"peut être testé en utilisant [method is_physics_interpolated_and_enabled]."
#: doc/classes/Node.xml
msgid ""
@@ -48584,36 +49601,52 @@ msgid ""
"See [member SceneTree.physics_interpolation] and [member ProjectSettings."
"physics/common/physics_interpolation]."
msgstr ""
+"Retourne [code]true[/code] si l'interpolation physique est activée (voir "
+"[member physics_interpolation_mode]) [b]et[/b] activée dans [SceneTree].\n"
+"Il s'agit d'une version pratique de [method is_physics_interpolated] qui "
+"vérifie également si l'interpolation physique est activée globalement.\n"
+"Voir [member SceneTree.physics_interpolation] et [member ProjectSettings."
+"physics/common/physics_interpolation]"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if physics processing is enabled (see [method "
"set_physics_process])."
msgstr ""
+"Retourne [code]true[/code] si le traitement physique est activé (voir "
+"[method set_physics_process)]."
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if internal physics processing is enabled (see "
"[method set_physics_process_internal])."
msgstr ""
+"Retourne [code]true[/code] si le traitement physique interne est activé "
+"(voir [method set_physics_process_internal)]."
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if processing is enabled (see [method "
"set_process])."
msgstr ""
+"Retourne [code]true[/code] si le traitement est activé (voir [method "
+"set_process)]."
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if the node is processing input (see [method "
"set_process_input])."
msgstr ""
+"Retourne [code]true[/code] si le nœud gère l'entrée (voir [method "
+"set_process_input)]."
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if internal processing is enabled (see [method "
"set_process_internal])."
msgstr ""
+"Retourne [code]true[/code] si le traitement interne est activé (voir [method "
+"set_process_internal)]."
#: doc/classes/Node.xml
msgid ""
@@ -48628,6 +49661,8 @@ msgid ""
"Returns [code]true[/code] if the node is processing unhandled key input (see "
"[method set_process_unhandled_key_input])."
msgstr ""
+"Retourne [code]true[/code] si le nœud gère l'entrée de touche non traitée "
+"(voir [method set_process_unhandled_key_input)]."
#: doc/classes/Node.xml
msgid ""
@@ -48635,12 +49670,17 @@ msgid ""
"Since calls, signals, etc are performed by tree order, changing the order of "
"children nodes may be useful."
msgstr ""
+"Déplace un nœud enfant à une position différente (ordre) parmi les autres "
+"enfants. Comme les appels, les signaux, etc. sont effectués par l'ordre des "
+"arborescences, changer l'ordre des nœuds d'enfants peut être utile."
#: doc/classes/Node.xml
msgid ""
"Prints all stray nodes (nodes outside the [SceneTree]). Used for debugging. "
"Works only in debug builds."
msgstr ""
+"Imprime tous les nœuds égarés (sauf le [SceneTree)]. Utilisé pour le "
+"débogage. Fonctionne seulement dans les versions de débogage."
#: doc/classes/Node.xml
msgid ""
@@ -48657,6 +49697,18 @@ msgid ""
"TheGame/SplashScreen/Camera2D\n"
"[/codeblock]"
msgstr ""
+"Imprime l'arborescence dans la console. Utilisé principalement à des fins de "
+"débogage. Cette version affiche le chemin par rapport au nœud actuel, ce qui "
+"est utile pour le copier/coller dans la fonction [method get_node].\n"
+"[ b]Exemple de sortie:[/b]\n"
+"[codeblock]\n"
+"TheGame\n"
+"TheGame/Menu\n"
+"TheGame/Menu/Label\n"
+"TheGame/Menu/Camera2D\n"
+"TheGame/SplashScreen\n"
+"TheGame/SplashScreen/Camera2D\n"
+"[/codeblock]"
#: doc/classes/Node.xml
msgid ""
@@ -48673,6 +49725,19 @@ msgid ""
" â”–â•´Camera2D\n"
"[/codeblock]"
msgstr ""
+"Comme [method print_tree], cela imprime l'arborescence dans la console. "
+"Cette version affiche une représentation plus graphique semblable à ce qui "
+"est affiché dans l'inspecteur de scène. C'est utile pour inspecter les "
+"grands arborescences.\n"
+"[ b]Exemple de sortie:[/b]\n"
+"[codeblock]\n"
+" â”–â•´TheGame\n"
+" â” â•´Menu\n"
+" ┃ ┠╴Label\n"
+" ┃ ┖╴Camera2D\n"
+" â”–â•´SplashScreen\n"
+" â”–â•´Camera2D\n"
+"[/codeblock]"
#: doc/classes/Node.xml
msgid ""
@@ -48683,12 +49748,20 @@ msgid ""
"[code]parent_first[/code] is [code]false[/code], the children will be called "
"first."
msgstr ""
+"Appelle la méthode donnée (si présente) avec les arguments spécifiés dans "
+"[code]args[/code] sur ce nœud et récursivement sur tous ses enfants. Si "
+"l'argument [code]parent_first[/code] est [code]true[/code], la méthode sera "
+"appelée d'abord sur le nœud courant, puis sur tous ses enfants. Si "
+"[code]parent_first[/code] est [code]false[/code], les enfants seront appelés "
+"en premier."
#: doc/classes/Node.xml
msgid ""
"Notifies the current node and all its children recursively by calling "
"[method Object.notification] on all of them."
msgstr ""
+"Notifie le nœud actuel et tous ses enfants de façon récursive en les "
+"appelant [method Object.notification] sur tous."
#: doc/classes/Node.xml
msgid ""
@@ -48703,6 +49776,17 @@ msgid ""
"[method @GDScript.is_instance_valid] before attempting to call its methods "
"or access its properties."
msgstr ""
+"Place le nœud dans une file d'attente pour la suppression à la fin de la "
+"trame actuel. Lorsque supprimé, tous ses nœuds d'enfants seront supprimés "
+"aussi. Cette méthode s'assure qu'il est sûr de supprimer le nœud, "
+"contrairement [method Object.free]. Utilisez [method Object."
+"is_queued_for_deletion] pour vérifier si un nœud sera supprimé à la fin de "
+"la trame.\n"
+"[b]Important:[/b] Si vous avez une variable pointant vers un nœud, il ne "
+"sera [i]pas[/i] attribué à [code]null[/code] une fois le nœud libéré. Au "
+"lieu de cela, il va pointer vers [i]l'instance précédemment libérée[/i] et "
+"vous devez le valider avec [method @GDScript.is_instance_valid] avant de "
+"risquer d'appeler des méthodes dessus ou d'accéder à ses propriétés."
#: doc/classes/Node.xml
msgid ""
@@ -48713,6 +49797,12 @@ msgid ""
"of it. After using [code]raise[/code], a Control will be drawn on top of its "
"siblings."
msgstr ""
+"Déplace ce nœud vers le bas de la hiérarchie des enfants. Cela est souvent "
+"utile dans les nœuds d'interface ([Control]), parce que leur ordre de dessin "
+"dépend de leur ordre dans l'arborescence. Le Node en haut est dessiné "
+"d'abord, puis les nœuds en dessous dans la hiérarchie qui sont "
+"successivement dessinés. Après avoir utilisé [code]raise[/code], un contrôle "
+"sera affiché par dessus les autres enfants."
#: doc/classes/Node.xml
msgid ""
@@ -48720,6 +49810,9 @@ msgid ""
"it exists). All event subscriptions that pass by the removed node will be "
"unsubscribed."
msgstr ""
+"Retire un nœud et fixe tous ses enfants comme enfants du nœud parent (s'il "
+"existe). Tous les souscriptions d'événement qui passent par le nœud retiré "
+"seront aussi retirées."
#: doc/classes/Node.xml
msgid ""
@@ -48728,12 +49821,19 @@ msgid ""
"(or its descendants) to be [code]null[/code], if that [member owner] is no "
"longer a parent or ancestor."
msgstr ""
+"Retire un nœud d'enfant. Le nœud n'est PAS supprimé et doit être supprimé "
+"manuellement.\n"
+"[b]Note :[/b] Cette fonction peut définir le [member owner] du nœud enlevé "
+"(ou ses descendants) comme [code]null[/code], si ce [member owner] n'est "
+"plus un parent."
#: doc/classes/Node.xml
msgid ""
"Removes a node from a group. See notes in the description, and the group "
"methods in [SceneTree]."
msgstr ""
+"Retire un nœud d'un groupe. Voir les notes dans la description, et les "
+"méthodes de groupe dans [SceneTree]."
#: doc/classes/Node.xml
msgid ""
@@ -48745,6 +49845,13 @@ msgid ""
"need to keep it in a variable for later use or free it using [method Object."
"free]."
msgstr ""
+"Remplace un nœud dans une scène par celui donné. Les souscriptions qui "
+"passent par ce nœud seront perdus.\n"
+"[b]Note :[/b] Le nœud donné deviendra le nouveau parent de tous les nœuds "
+"d'enfants que le nœud remplacé avait.\n"
+"[b]Note :[/b] Le nœud remplacé n'est pas automatiquement libéré, donc vous "
+"devez le garder dans une variable pour une utilisation ultérieure ou le "
+"libérer en utilisant [method Object.free]"
#: doc/classes/Node.xml
msgid ""
@@ -48756,6 +49863,13 @@ msgid ""
"which case, [code]_ready[/code] will be called in the same order as it would "
"normally)."
msgstr ""
+"Demande que [code]_ready[/code] soit de nouveau appelé. Notez que la méthode "
+"va s'appeler immédiatement, mais qu'elle est prévue lorsque le nœud est "
+"ajouté à l'arborescence de scène à nouveau (voir [method _ready)]. "
+"[code]_ready[/code] est appelé seulement pour le nœud qui l'a demandé, ce "
+"qui signifie que vous devez le demander pour chaque enfant si vous voulez "
+"qu'ils appellent [code]_ready[/code] aussi (dans quel cas, [code]_ready[/"
+"code] sera appelé dans le même ordre que normalement)."
#: doc/classes/Node.xml
msgid ""
@@ -48771,6 +49885,17 @@ msgid ""
"[b]Note:[/b] This function should be called [b]after[/b] moving the node, "
"rather than before."
msgstr ""
+"Lorsque l'interpolation de la physique est active, déplacer un nœud vers une "
+"transformation radicalement différente (comme le placement dans un niveau) "
+"peut entraîner un glissement visible car l'objet est rendu lors de son "
+"déplacement lors de la trame physique.\n"
+"Ce glitch peut être évité en appelant [code]reset_physics_interpolation[/"
+"code], qui annule temporairement l'interpolation jusqu'à ce que la trame "
+"physique soit complète.\n"
+"[constant NOTIFICATION_RESET_PHYSICS_INTERPOLATION] sera reçu par le nœud et "
+"tous les enfants de façon récursive.\n"
+"[b]Note :[/b] Cette fonction doit être appelée [b]après[/b] le déplacement "
+"du nœud, plutôt qu'avant."
#: doc/classes/Node.xml
msgid ""
@@ -48788,6 +49913,20 @@ msgid ""
"like [code]server_disconnected[/code] or by checking [code]SceneTree."
"network_peer.get_connection_status() == CONNECTION_CONNECTED[/code]."
msgstr ""
+"Envoie une requête d'appel de procédure à distance pour la [code]method[/"
+"code] donnée aux pairs sur le réseau (et localement), en option en envoyant "
+"tous les arguments supplémentaires comme arguments à la méthode appelée par "
+"le RPC. La requête d'appel ne sera reçue que par des nœuds ayant le même "
+"[NodePath], y compris le même nom de nœud. Le comportement dépend de la "
+"configuration RPC pour la méthode donnée, voir [method rpc_config]. Les "
+"méthodes ne sont pas exposées aux RPC par défaut. Voir aussi [method rset] "
+"et [method rset_config] pour les propriétés. Retourne [code]null[/code].\n"
+"[b]Note :[/b] Vous pouvez seulement utiliser RPC en toute sécurité sur les "
+"clients après avoir reçu le signal [code]connected_to_server[/code] du "
+"[SceneTree]. Vous devez également suivre l'état de connexion, soit par les "
+"signaux [SceneTree] comme [code]server_disconnected[/code] ou en vérifiant "
+"[code]SceneTree.network_peer.get_connection_status() == "
+"CONNECTION_CONNECTED[/code]."
#: doc/classes/Node.xml
msgid ""
@@ -48799,6 +49938,13 @@ msgid ""
"By default, methods are not exposed to networking (and RPCs). See also "
"[method rset] and [method rset_config] for properties."
msgstr ""
+"Change le mode RPC pour la [code]method[/code] donné pour le [code]mode[/"
+"code] spécifié. Voir [enum MultiplayerAPI.RPCMode]. Une alternative est "
+"d'annoter les méthodes et les propriétés avec les mots-clés correspondants "
+"([code]remote[/code], [code]master[/code], [code]puppet[/code], "
+"[code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/code)]. "
+"Par défaut, les méthodes ne sont pas exposées au réseaut (et aux RPC). Voir "
+"aussi [method rset] et [method rset_config] pour les propriétés."
#: doc/classes/Node.xml
msgid ""
@@ -48806,6 +49952,9 @@ msgid ""
"(see [method NetworkedMultiplayerPeer.set_target_peer]). Returns [code]null[/"
"code]."
msgstr ""
+"Envoie un [method rpc] à un pair spécifique identifié par [code]peer_id[/"
+"code] (voir [method NetworkedMultiplayerPeer.set_target_peer]). Retourne "
+"[code]null[/code]."
#: doc/classes/Node.xml
msgid ""
@@ -48820,6 +49969,9 @@ msgid ""
"using an unreliable protocol (see [method NetworkedMultiplayerPeer."
"set_target_peer]). Returns [code]null[/code]."
msgstr ""
+"Envoie un [method rpc] à un pair spécifique identifié par [code]peer_id[/"
+"code] en utilisant un protocole non fiable (voir [method "
+"NetworkedMultiplayerPeer.set_target_peer]). Retourne [code]null[/code]."
#: doc/classes/Node.xml
msgid ""
@@ -48828,6 +49980,10 @@ msgid ""
"rset_config]. See also [method rpc] for RPCs for methods, most information "
"applies to this method as well."
msgstr ""
+"Change une propriété distante sur d'autres pairs (et localement). Le "
+"comportement dépend de la configuration du RPC pour la propriété donnée, "
+"voir [method rset_config]. Voir aussi [method rpc] pour les RPC sur les "
+"méthodes, la plupart des informations s'appliquent aussi à cette méthode."
#: doc/classes/Node.xml
msgid ""
@@ -48839,6 +49995,13 @@ msgid ""
"By default, properties are not exposed to networking (and RPCs). See also "
"[method rpc] and [method rpc_config] for methods."
msgstr ""
+"Change le mode RPC pour la [code]property[/code] donnée au [code]mode[/code] "
+"spécifié. Voir [enum MultiplayerAPI.RPCMode]. Une alternative est "
+"l'annotation des méthodes et des propriétés avec les mots-clés "
+"correspondants ([code]remote[/code], [code]master[/code], [code]puppet[/"
+"code], [code]remotesync[/code], [code]mastersync[/code], [code]puppetsync[/"
+"code)]. Par défaut, les propriétés ne sont pas exposées au réseau (et au "
+"RPC). Voir aussi [method rpc] et [method rpc_config] pour les méthodes."
#: doc/classes/Node.xml
msgid ""
@@ -50503,8 +51666,14 @@ msgid "See [enum ShadowDetail]."
msgstr "Voir [enum ShadowDetail]."
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
-msgstr "Voir [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
+msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
@@ -50515,7 +51684,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -69876,16 +71046,26 @@ msgid "The size of one pixel's width on the sprite to scale it in 3D."
msgstr "La taille d'un des pixels de la sprite pour définir sa taille en 3D."
#: doc/classes/SpriteBase3D.xml
+#, fuzzy
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
"This is because opaque objects are not sorted, while transparent objects are "
"sorted from back to front (subject to priority)."
msgstr ""
+"Définit la priorité de rendu pour le texte. Des objets plus prioritaires "
+"seront affichés par-dessus des objets moins inférieurs.\n"
+"[b]Note: [/b] Cela ne s'applique que si [member alpha_cut] est défini à "
+"[constant ALPHA_CUT_DISABLED] (c'est la valeur par défaut).\n"
+"[b]Note :[/b] Cela ne s'applique qu'au tri des objets transparents. Cela "
+"n'affectera pas la façon dont les objets transparents sont triés par rapport "
+"aux objets opaques. C'est parce que les objets opaques ne sont pas triés, "
+"alors que les objets transparents sont triés de l'arrière à l'avant (et "
+"suivant leur priorité)."
#: doc/classes/SpriteBase3D.xml
#, fuzzy
@@ -73232,9 +74412,10 @@ msgid "Sets the text for a specific line."
msgstr "Définit le texte pour la ligne spécifiée."
#: doc/classes/TextEdit.xml
+#, fuzzy
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
"Ajoute un marque-page pour la ligne [code]line[/code] si [code]bookmark[/"
@@ -77233,14 +78414,19 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
+"Retourne le TreeItem précédent dans l'arbre ou un objet nul s'il n'y en a "
+"pas."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -77255,16 +78441,19 @@ msgid "Returns the parent TreeItem or a null object if there is none."
msgstr "Renvoie le TreeItem parent ou un objet nul s’il n’y en a pas."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
"Retourne le TreeItem précédent dans l'arbre ou un objet nul s'il n'y en a "
"pas."
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -84934,9 +86123,12 @@ msgstr ""
"Définit la matrice de transformation globale de la fenêtre d'affichage."
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "Si [code]true[/code], l'interpolation fait une boucle."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -85028,6 +86220,15 @@ msgstr "Convertit le format de l’image. Voir les constantes [enum Format]."
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/gl.po b/doc/translations/gl.po
index 17fb042ad7..207a818761 100644
--- a/doc/translations/gl.po
+++ b/doc/translations/gl.po
@@ -848,7 +848,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7685,8 +7692,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11754,7 +11761,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20165,7 +20177,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23551,7 +23563,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25382,7 +25394,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32478,7 +32490,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32494,7 +32506,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32524,7 +32536,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36624,7 +36636,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36885,7 +36897,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36999,6 +37011,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39696,7 +39754,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39708,7 +39772,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57462,7 +57527,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60353,8 +60418,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63977,13 +64042,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63995,13 +64061,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70887,7 +70954,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70972,6 +71043,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/hi.po b/doc/translations/hi.po
index 98778940cf..2df4b9bbe4 100644
--- a/doc/translations/hi.po
+++ b/doc/translations/hi.po
@@ -847,7 +847,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7684,8 +7691,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11753,7 +11760,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20164,7 +20176,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23550,7 +23562,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25381,7 +25393,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32477,7 +32489,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32493,7 +32505,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32523,7 +32535,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36623,7 +36635,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36884,7 +36896,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36998,6 +37010,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39695,7 +39753,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39707,7 +39771,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57461,7 +57526,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60352,8 +60417,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63976,13 +64041,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63994,13 +64060,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70886,7 +70953,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70971,6 +71042,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/hu.po b/doc/translations/hu.po
index 325d7d0f52..221206451a 100644
--- a/doc/translations/hu.po
+++ b/doc/translations/hu.po
@@ -866,7 +866,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7703,8 +7710,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11772,7 +11779,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20183,7 +20195,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23569,7 +23581,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25400,7 +25412,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32496,7 +32508,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32512,7 +32524,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32542,7 +32554,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36642,7 +36654,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36903,7 +36915,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37017,6 +37029,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39714,7 +39772,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39726,7 +39790,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57480,7 +57545,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60371,8 +60436,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63995,13 +64060,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64013,13 +64079,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70905,7 +70972,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70990,6 +71061,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/id.po b/doc/translations/id.po
index eb95a98f22..39310a6160 100644
--- a/doc/translations/id.po
+++ b/doc/translations/id.po
@@ -1199,10 +1199,22 @@ msgstr ""
"atau peringatan dicetak."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Seperti [metode cetak], tetapi hanya mencetak saat digunakan dalam mode "
-"debug."
+"Mencetak trek tumpukan di lokasi kode, hanya berfungsi saat dijalankan "
+"dengan debugger dihidupkan.\n"
+"Output di konsol akan terlihat seperti ini:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 dalam fungsi '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
#, fuzzy
@@ -8097,8 +8109,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12166,7 +12178,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20579,7 +20596,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23969,7 +23986,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25806,7 +25823,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32903,7 +32920,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32919,7 +32936,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32949,7 +32966,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37070,7 +37087,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37331,7 +37348,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37447,6 +37464,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40144,7 +40207,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40156,7 +40225,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57931,7 +58001,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60828,8 +60898,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64453,13 +64523,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64471,13 +64542,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71368,7 +71440,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71453,6 +71529,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/is.po b/doc/translations/is.po
index c68a096dfa..e3080abf39 100644
--- a/doc/translations/is.po
+++ b/doc/translations/is.po
@@ -847,7 +847,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7684,8 +7691,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11753,7 +11760,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20164,7 +20176,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23550,7 +23562,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25381,7 +25393,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32477,7 +32489,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32493,7 +32505,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32523,7 +32535,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36623,7 +36635,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36884,7 +36896,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36998,6 +37010,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39695,7 +39753,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39707,7 +39771,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57461,7 +57526,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60352,8 +60417,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63976,13 +64041,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63994,13 +64060,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70886,7 +70953,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70971,6 +71042,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/it.po b/doc/translations/it.po
index fd78bc8f1c..3acfabc091 100644
--- a/doc/translations/it.po
+++ b/doc/translations/it.po
@@ -25,12 +25,13 @@
# Andrea Leganza <neogene@gmail.com>, 2021.
# Federico Caprini <caprinifede@gmail.com>, 2022.
# Alessandro Casalino <alessandro.casalino93@gmail.com>, 2022.
+# AndreWharn <andrewharnofficial@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-04-25 15:12+0000\n"
-"Last-Translator: Micila Micillotto <micillotto@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:56+0000\n"
+"Last-Translator: AndreWharn <andrewharnofficial@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/it/>\n"
"Language: it\n"
@@ -38,7 +39,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.12.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -101,18 +102,16 @@ msgid "Default"
msgstr "Predefinito"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Setter"
-msgstr "Impostatore"
+msgstr "Setter"
#: doc/tools/make_rst.py
msgid "value"
msgstr "valore"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Getter"
-msgstr "Acchiappatore"
+msgstr "Getter"
#: doc/tools/make_rst.py
msgid ""
@@ -137,9 +136,8 @@ msgstr ""
"qui."
#: doc/tools/make_rst.py
-#, fuzzy
msgid "This method is used to construct a type."
-msgstr "Questo metodo viene utilizzato per creare un tipo di variabile."
+msgstr "Questo metodo viene utilizzato per creare un tipo."
#: doc/tools/make_rst.py
msgid ""
@@ -1372,10 +1370,22 @@ msgstr ""
"messaggi di debug ed errore che vengono mostrati con la stack trace."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Come [method print], ma stampa solo quando viene utilizzato in modalità "
-"debug."
+"Stampa un stack trace nella posizione del codice, funziona solo quando il "
+"debugger è attivato.\n"
+"L'output nella console apparirà come:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8702,8 +8712,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12783,7 +12793,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -21303,7 +21318,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24703,7 +24718,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -26543,7 +26558,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -33683,7 +33698,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33699,7 +33714,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33732,7 +33747,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37884,7 +37899,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -38148,7 +38163,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -38267,6 +38282,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40972,7 +41033,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40984,7 +41051,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58807,7 +58875,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -61723,8 +61791,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -65387,13 +65455,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -65405,13 +65474,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -72367,11 +72437,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-"Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento "
-"è disabilitato."
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -72455,6 +72526,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/ja.po b/doc/translations/ja.po
index 324df4d9ae..fe76c741d0 100644
--- a/doc/translations/ja.po
+++ b/doc/translations/ja.po
@@ -1333,8 +1333,22 @@ msgstr ""
"ãŸã¨ãã«ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "[method print] ã¨åŒæ§˜ã§ã™ãŒã€ã—ã‹ã—デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰æ™‚ã«ã®ã¿è¡¨ç¤ºã—ã¾ã™ã€‚"
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
+"コードä½ç½®ã®ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ©ãƒƒã‚¯ã‚’表示ã—ã¾ã™ã€‚デãƒãƒƒã‚¬ã‚’有効ã«ã—ã¦å®Ÿè¡Œã—ãŸæ™‚ã«ã®"
+"ã¿å‹•作ã—ã¾ã™ã€‚\n"
+"コンソール内ã§ã®å‡ºåŠ›ã¯ã“ã®ã‚ˆã†ã«ãªã‚Šã¾ã™:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -9918,8 +9932,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -14717,7 +14731,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -23302,7 +23321,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -26725,7 +26744,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -28567,7 +28586,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -35779,7 +35798,7 @@ msgstr "円柱ã®é«˜ã•。"
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -35795,7 +35814,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -35831,7 +35850,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -40028,7 +40047,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -40295,7 +40314,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -40416,6 +40435,53 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid "Set the max packet size that this peer can handle."
+msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -43124,7 +43190,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -43136,7 +43208,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -61336,7 +61409,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -64289,8 +64362,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -67983,13 +68056,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -68001,13 +68075,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -75036,9 +75111,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "[code]true[/code]ã®å ´åˆã€é ‚点色をアルベド色ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚"
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -75122,6 +75200,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/ko.po b/doc/translations/ko.po
index 2f6879593c..ac9274cee6 100644
--- a/doc/translations/ko.po
+++ b/doc/translations/ko.po
@@ -1004,7 +1004,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7859,8 +7866,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11931,7 +11938,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20452,7 +20464,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23844,7 +23856,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25682,7 +25694,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32792,7 +32804,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32808,7 +32820,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32838,7 +32850,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36972,7 +36984,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37235,7 +37247,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37353,6 +37365,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40176,7 +40234,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40188,7 +40252,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57973,7 +58038,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60874,8 +60939,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64507,13 +64572,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64525,13 +64591,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71452,7 +71519,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71537,6 +71608,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/lt.po b/doc/translations/lt.po
index 2468d389d3..79790f5e70 100644
--- a/doc/translations/lt.po
+++ b/doc/translations/lt.po
@@ -857,7 +857,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7694,8 +7701,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11763,7 +11770,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20174,7 +20186,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23560,7 +23572,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25391,7 +25403,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32487,7 +32499,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32503,7 +32515,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32533,7 +32545,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36633,7 +36645,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36894,7 +36906,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37008,6 +37020,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39705,7 +39763,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39717,7 +39781,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57471,7 +57536,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60362,8 +60427,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63986,13 +64051,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64004,13 +64070,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70896,7 +70963,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70981,6 +71052,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/lv.po b/doc/translations/lv.po
index 9faf7fd017..1f63bf69bb 100644
--- a/doc/translations/lv.po
+++ b/doc/translations/lv.po
@@ -862,7 +862,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7699,8 +7706,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11768,7 +11775,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20179,7 +20191,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23568,7 +23580,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25399,7 +25411,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32495,7 +32507,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32511,7 +32523,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32541,7 +32553,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36641,7 +36653,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36902,7 +36914,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37016,6 +37028,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39713,7 +39771,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39725,7 +39789,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57479,7 +57544,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60370,8 +60435,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63994,13 +64059,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64012,13 +64078,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70904,7 +70971,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70989,6 +71060,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/mr.po b/doc/translations/mr.po
index c989fcc549..32832a4d8f 100644
--- a/doc/translations/mr.po
+++ b/doc/translations/mr.po
@@ -845,7 +845,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7682,8 +7689,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11751,7 +11758,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20162,7 +20174,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23548,7 +23560,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25379,7 +25391,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32475,7 +32487,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32491,7 +32503,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32521,7 +32533,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36621,7 +36633,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36882,7 +36894,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36996,6 +37008,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39693,7 +39751,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39705,7 +39769,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57459,7 +57524,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60350,8 +60415,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63974,13 +64039,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63992,13 +64058,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70884,7 +70951,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70969,6 +71040,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/nb.po b/doc/translations/nb.po
index 8017f4006b..42dca83c45 100644
--- a/doc/translations/nb.po
+++ b/doc/translations/nb.po
@@ -857,7 +857,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7694,8 +7701,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11763,7 +11770,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20174,7 +20186,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23560,7 +23572,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25391,7 +25403,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32487,7 +32499,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32503,7 +32515,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32533,7 +32545,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36633,7 +36645,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36894,7 +36906,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37008,6 +37020,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39705,7 +39763,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39717,7 +39781,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57471,7 +57536,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60362,8 +60427,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63986,13 +64051,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64004,13 +64070,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70896,7 +70963,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70981,6 +71052,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/ne.po b/doc/translations/ne.po
index 9a17a51fb6..0ba02ba939 100644
--- a/doc/translations/ne.po
+++ b/doc/translations/ne.po
@@ -845,7 +845,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7682,8 +7689,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11751,7 +11758,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20162,7 +20174,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23548,7 +23560,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25379,7 +25391,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32475,7 +32487,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32491,7 +32503,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32521,7 +32533,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36621,7 +36633,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36882,7 +36894,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36996,6 +37008,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39693,7 +39751,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39705,7 +39769,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57459,7 +57524,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60350,8 +60415,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63974,13 +64039,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63992,13 +64058,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70884,7 +70951,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70969,6 +71040,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/nl.po b/doc/translations/nl.po
index d36175b6c2..3053cadb2b 100644
--- a/doc/translations/nl.po
+++ b/doc/translations/nl.po
@@ -906,7 +906,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7751,8 +7758,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11820,7 +11827,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20231,7 +20243,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23620,7 +23632,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25451,7 +25463,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32547,7 +32559,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32563,7 +32575,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32593,7 +32605,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36693,7 +36705,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36954,7 +36966,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37068,6 +37080,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39765,7 +39823,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39777,7 +39841,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57532,7 +57597,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60423,8 +60488,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64047,13 +64112,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64065,13 +64131,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70957,7 +71024,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71042,6 +71113,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/pl.po b/doc/translations/pl.po
index 343dfb0050..729b6a654c 100644
--- a/doc/translations/pl.po
+++ b/doc/translations/pl.po
@@ -1279,8 +1279,22 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "Jak [method print], ale wypisuje tylko w trybie debugowania."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
+"Wypisuje zrzut stosu w miejscu kodu, działa tylko przy uruchamianiu z "
+"włączonym debuggerem.\n"
+"Wynik w konsoli wyglądać może tak:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8189,8 +8203,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12262,7 +12276,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20703,7 +20722,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24102,7 +24121,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25939,7 +25958,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -33076,7 +33095,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33092,7 +33111,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33125,7 +33144,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37281,7 +37300,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37545,7 +37564,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37664,6 +37683,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40361,7 +40426,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40373,7 +40444,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58195,7 +58267,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -61097,8 +61169,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64744,13 +64816,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64762,13 +64835,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71696,11 +71770,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-"Jeśli [code]true[/code], potomne węzły są sortowane. W innym przypadku jest "
-"wyłączone."
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -71784,6 +71859,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/pt.po b/doc/translations/pt.po
index fdb01b1579..c99a8e1cd6 100644
--- a/doc/translations/pt.po
+++ b/doc/translations/pt.po
@@ -1340,9 +1340,22 @@ msgstr ""
"rastreamento de pilha quando um erro ou aviso é impresso ."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Igual [method print], mas só imprime quando usado em modo de depuração."
+"Imprime a pilha de chamadas no local do código, só funciona com o depurador "
+"ativado.\n"
+"Saída no console vai parecer assim:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8506,8 +8519,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12580,7 +12593,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -21038,7 +21056,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24434,7 +24452,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -26271,7 +26289,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -33383,7 +33401,7 @@ msgstr "A altura do cilindro."
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33399,7 +33417,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33430,7 +33448,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37559,7 +37577,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37824,7 +37842,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37942,6 +37960,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40639,7 +40703,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40651,7 +40721,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58499,7 +58570,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -61396,8 +61467,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -65035,13 +65106,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -65053,13 +65125,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71954,7 +72027,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -72039,6 +72116,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po
index 50d4359c46..74758850c7 100644
--- a/doc/translations/pt_BR.po
+++ b/doc/translations/pt_BR.po
@@ -1368,9 +1368,22 @@ msgstr ""
"rastreamento de pilha quando um erro ou aviso é impresso ."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"Igual [method print], mas só imprime quando usado em modo de depuração."
+"Imprime a pilha de chamadas no local do código, só funciona com o depurador "
+"habilitado.\n"
+"Saída no console vai parecer assim:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8742,8 +8755,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12820,7 +12833,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -21332,7 +21350,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24735,7 +24753,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -26574,7 +26592,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -33720,7 +33738,7 @@ msgstr "A altura do cilindro."
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33736,7 +33754,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33769,7 +33787,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37925,7 +37943,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -38191,7 +38209,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -38310,6 +38328,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -41007,7 +41071,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -41019,7 +41089,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58868,7 +58939,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -61780,8 +61851,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -65433,13 +65504,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -65451,13 +65523,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -72389,11 +72462,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-"Se [code]true[/code], os nós filhos são organizados, do contrário, a "
-"organização é desabilitada."
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -72477,6 +72551,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/ro.po b/doc/translations/ro.po
index 8c7112f102..332dbd0801 100644
--- a/doc/translations/ro.po
+++ b/doc/translations/ro.po
@@ -873,7 +873,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7714,8 +7721,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11783,7 +11790,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20194,7 +20206,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23583,7 +23595,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25414,7 +25426,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32510,7 +32522,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32526,7 +32538,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32556,7 +32568,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36656,7 +36668,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36917,7 +36929,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37032,6 +37044,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39729,7 +39787,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39741,7 +39805,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57495,7 +57560,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60386,8 +60451,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64010,13 +64075,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64028,13 +64094,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70920,7 +70987,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71005,6 +71076,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/ru.po b/doc/translations/ru.po
index 1596ca8553..985198198a 100644
--- a/doc/translations/ru.po
+++ b/doc/translations/ru.po
@@ -1402,8 +1402,21 @@ msgstr ""
"траÑÑировка Ñтека при печати ошибки или предупреждениÑ."
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "Как [method print], но печатает только в режиме отладки."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
+"Печатает трек Ñтека вызовов, работает только еÑли включён отладчик.\n"
+"Вывод в конÑоли будет выглÑдеть примерно так:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -9352,8 +9365,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -13447,7 +13460,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -22008,7 +22026,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -25419,7 +25437,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -27259,7 +27277,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -34416,7 +34434,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -34432,7 +34450,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -34465,7 +34483,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -38625,7 +38643,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -38890,7 +38908,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -39022,6 +39040,53 @@ msgstr ""
msgid "Control activation of this server."
msgstr "Управление активацией данного Ñервера."
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid "Set the max packet size that this peer can handle."
+msgstr "Возвращает длину вектора."
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
#, fuzzy
msgid ""
@@ -41794,7 +41859,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -41806,7 +41877,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -59734,7 +59806,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -62675,8 +62747,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -66352,15 +66424,16 @@ msgstr ""
#: doc/classes/TreeItem.xml
#, fuzzy
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
"Возвращает поÑледний Ñлемент маÑÑива, или[code]null[/code] еÑли маÑÑив "
"пуÑтой."
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -66373,15 +66446,16 @@ msgstr ""
#: doc/classes/TreeItem.xml
#, fuzzy
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
"Возвращает первый Ñлемент в маÑÑиве, или [code]null[/code] еÑли маÑÑив "
"пуÑтой."
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -73453,9 +73527,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "ЕÑли [code]true[/code], текÑтура будет центрирована."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -73539,6 +73616,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/sk.po b/doc/translations/sk.po
index 38e701eef9..ddcdeb10f1 100644
--- a/doc/translations/sk.po
+++ b/doc/translations/sk.po
@@ -848,7 +848,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7685,8 +7692,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11754,7 +11761,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20165,7 +20177,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23554,7 +23566,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25385,7 +25397,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32481,7 +32493,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32497,7 +32509,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32527,7 +32539,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36627,7 +36639,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36888,7 +36900,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37002,6 +37014,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39699,7 +39757,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39711,7 +39775,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57465,7 +57530,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60356,8 +60421,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63980,13 +64045,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63998,13 +64064,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70890,7 +70957,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70975,6 +71046,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po
index 3984d209f4..6a336f195b 100644
--- a/doc/translations/sr_Cyrl.po
+++ b/doc/translations/sr_Cyrl.po
@@ -859,7 +859,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7696,8 +7703,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11765,7 +11772,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20176,7 +20188,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23565,7 +23577,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25396,7 +25408,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32492,7 +32504,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32508,7 +32520,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32538,7 +32550,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36638,7 +36650,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36899,7 +36911,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37013,6 +37025,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39710,7 +39768,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39722,7 +39786,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57476,7 +57541,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60367,8 +60432,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63991,13 +64056,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64009,13 +64075,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70901,7 +70968,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70986,6 +71057,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/sv.po b/doc/translations/sv.po
index 9be24493d7..b582952401 100644
--- a/doc/translations/sv.po
+++ b/doc/translations/sv.po
@@ -6,12 +6,13 @@
# Christoffer Sundbom <christoffer_karlsson@live.se>, 2021.
# Kent Jofur <kent.jofur@gmail.com>, 2021.
# Alex25820 <alexs25820@gmail.com>, 2021.
+# Björn Åkesson <bjorn.akesson@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-12-19 17:31+0000\n"
-"Last-Translator: Alex25820 <alexs25820@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:56+0000\n"
+"Last-Translator: Björn Åkesson <bjorn.akesson@gmail.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/sv/>\n"
"Language: sv\n"
@@ -19,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 4.10\n"
+"X-Generator: Weblate 4.14-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -92,7 +93,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "Getter"
-msgstr ""
+msgstr "Getter"
#: doc/tools/make_rst.py
msgid ""
@@ -848,7 +849,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7685,8 +7693,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11754,7 +11762,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20165,7 +20178,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23551,7 +23564,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25382,7 +25395,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32478,7 +32491,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32494,7 +32507,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32524,7 +32537,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36624,7 +36637,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36885,7 +36898,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -36999,6 +37012,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -37553,7 +37612,7 @@ msgstr ""
#: doc/classes/Node.xml
msgid "Nodes and Scenes"
-msgstr ""
+msgstr "Noder och scener"
#: doc/classes/Node.xml
msgid "All Demos"
@@ -39696,7 +39755,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39708,7 +39773,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57462,7 +57528,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60353,8 +60419,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -63977,13 +64043,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -63995,13 +64062,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -70887,7 +70955,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70972,6 +71044,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/th.po b/doc/translations/th.po
index dabf3c09f3..3b8c2afd36 100644
--- a/doc/translations/th.po
+++ b/doc/translations/th.po
@@ -933,7 +933,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7790,8 +7797,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11860,7 +11867,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20275,7 +20287,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23665,7 +23677,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25500,7 +25512,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32650,7 +32662,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32666,7 +32678,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32696,7 +32708,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36813,7 +36825,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37074,7 +37086,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37191,6 +37203,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39938,7 +39996,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39950,7 +40014,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57724,7 +57789,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60621,8 +60686,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64246,13 +64311,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64264,13 +64330,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71172,7 +71239,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71257,6 +71328,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/tl.po b/doc/translations/tl.po
index b100d0e612..6fe51a2de6 100644
--- a/doc/translations/tl.po
+++ b/doc/translations/tl.po
@@ -924,7 +924,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7761,8 +7768,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11834,7 +11841,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20248,7 +20260,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23640,7 +23652,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25471,7 +25483,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32573,7 +32585,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32589,7 +32601,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32622,7 +32634,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36737,7 +36749,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -36998,7 +37010,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37112,6 +37124,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39809,7 +39867,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39821,7 +39885,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57578,7 +57643,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60469,8 +60534,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64102,13 +64167,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64120,13 +64186,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71015,7 +71082,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71100,6 +71171,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/tr.po b/doc/translations/tr.po
index dc9d2524b7..ffa15621df 100644
--- a/doc/translations/tr.po
+++ b/doc/translations/tr.po
@@ -20,12 +20,13 @@
# Ramazan Aslan <legendraslan@gmail.com>, 2022.
# paledega <paledega@yandex.ru>, 2022.
# Yekez <yasintonge@gmail.com>, 2022.
+# Deleted User <noreply+46858@weblate.org>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-07-03 00:45+0000\n"
-"Last-Translator: Yekez <yasintonge@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:56+0000\n"
+"Last-Translator: Deleted User <noreply+46858@weblate.org>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/tr/>\n"
"Language: tr\n"
@@ -33,7 +34,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -96,7 +97,6 @@ msgid "Default"
msgstr "Varsayılan"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Setter"
msgstr "Ayarlayıcı"
@@ -105,7 +105,6 @@ msgid "value"
msgstr "deÄŸer"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Getter"
msgstr "Alıcı"
@@ -1315,10 +1314,22 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
-"[method print] yöntemi gibidir fakat yanlız hata ayıklama (debug) modunda "
-"kullanılır."
+"Kod içindeki istiflenme konumunu yazdırır ve yanlızca hata ayıklayıcı "
+"(debugger) açıkken çalışır.\n"
+"Konsoldaki çıktı aşağıdaki gibi bir şey olacaktır.\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8471,8 +8482,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12543,7 +12554,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20978,7 +20994,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24374,7 +24390,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -26215,7 +26231,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -33330,7 +33346,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33346,7 +33362,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33378,7 +33394,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37520,7 +37536,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37784,7 +37800,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37903,6 +37919,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40600,7 +40662,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40612,7 +40680,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58417,7 +58486,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -61318,8 +61387,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64955,13 +65024,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64973,13 +65043,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71895,10 +71966,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -71982,6 +72055,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/uk.po b/doc/translations/uk.po
index afedf189b4..b1272c6b3e 100644
--- a/doc/translations/uk.po
+++ b/doc/translations/uk.po
@@ -991,7 +991,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7843,8 +7850,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11916,7 +11923,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20344,7 +20356,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23733,7 +23745,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25570,7 +25582,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32680,7 +32692,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32696,7 +32708,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32726,7 +32738,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36863,7 +36875,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37126,7 +37138,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37244,6 +37256,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39941,7 +39999,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39953,7 +40017,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57742,7 +57807,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60644,8 +60709,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64279,13 +64344,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64297,13 +64363,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71215,7 +71282,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71300,6 +71371,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/vi.po b/doc/translations/vi.po
index ab16aa1782..60ab8769ab 100644
--- a/doc/translations/vi.po
+++ b/doc/translations/vi.po
@@ -1202,8 +1202,15 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "Giống [method print], nhưng chỉ in khi sử dụng trong chế độ gỡ lỗi."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -8138,8 +8145,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12211,7 +12218,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20643,7 +20655,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -24035,7 +24047,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25872,7 +25884,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32980,7 +32992,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32996,7 +33008,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -33027,7 +33039,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -37165,7 +37177,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37429,7 +37441,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37548,6 +37560,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -40245,7 +40303,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -40257,7 +40321,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -58065,7 +58130,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60966,8 +61031,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64603,13 +64668,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64621,13 +64687,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71550,9 +71617,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -71636,6 +71706,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po
index d2179a01f2..76ea804df5 100644
--- a/doc/translations/zh_CN.po
+++ b/doc/translations/zh_CN.po
@@ -62,7 +62,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-07-17 07:14+0000\n"
+"PO-Revision-Date: 2022-07-26 01:54+0000\n"
"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/zh_Hans/>\n"
@@ -645,7 +645,7 @@ msgstr ""
"a = floor(2.99) # a = 2.0\n"
"a = floor(-2.99) # a = -3.0\n"
"[/codeblock]\n"
-"请å‚阅 [method ceil]ã€[method round]ã€[method stepify] å’Œ [int]。\n"
+"å¦è¯·å‚阅 [method ceil]ã€[method round]ã€[method stepify] å’Œ [int]。\n"
"[b]注æ„:[/b]è¯¥æ–¹æ³•è¿”å›žä¸€ä¸ªæµ®ç‚¹æ•°ã€‚å¦‚æžœä½ éœ€è¦æ•´æ•°ï¼Œè€Œ [code]s[/code] 是éžè´Ÿ"
"数,你å¯ä»¥ç›´æŽ¥ä½¿ç”¨ [code]int(s)[/code]。"
@@ -1322,8 +1322,21 @@ msgstr ""
"在打å°é”™è¯¯æˆ–警告时还会显示堆栈跟踪。"
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
-msgstr "与 [method print] 类似,但仅在调试模å¼ä¸‹ä½¿ç”¨æ—¶æ‰æ‰“å°ã€‚"
+#, fuzzy
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
+msgstr ""
+"在代ç ä½ç½®æ‰“å°å †æ ˆè½¨è¿¹ï¼Œä»…在打开调试器的情况下è¿è¡Œã€‚\n"
+"控制å°ä¸­çš„输出如下所示:\n"
+"[codeblock]\n"
+"Frame 0 - res://test.gd:16 in function '_process'\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -9568,10 +9581,11 @@ msgstr ""
"åˆ¶å™¨ä¹Ÿå°†ä¿æŒç›¸åŒçš„ ID。"
#: doc/classes/ARVRController.xml
+#, fuzzy
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -12380,6 +12394,10 @@ msgid ""
"name can't be resolved at runtime, it will fall back to [code]\"Master\"[/"
"code]."
msgstr ""
+"这个音频在哪个总线上播放。\n"
+"[b]注æ„:[/b]设置这个属性时,请记ä½å®ƒå¹¶ä¸ä¼šå¯¹ç»™å®šçš„å称是å¦ä¸ŽçŽ°æœ‰æ€»çº¿åŒ¹é…进行"
+"校验。这是因为音频总线布局å¯ä»¥åœ¨è®¾ç½®è¿™ä¸ªå±žæ€§åŽå†åŠ è½½ã€‚å¦‚æžœè¿™ä¸ªç»™å®šçš„å称在è¿"
+"行时无法解æžï¼Œå°±ä¼šå›žé€€åˆ° [code]\"Master\"[/code]。"
#: doc/classes/AudioStreamPlayer.xml
msgid ""
@@ -12580,6 +12598,10 @@ msgid ""
"name can't be resolved at runtime, it will fall back to [code]\"Master\"[/"
"code]."
msgstr ""
+"播放音频的总线。\n"
+"[b]注æ„:[/b]设置这个属性时,请记ä½å®ƒå¹¶ä¸ä¼šå¯¹ç»™å®šçš„å称是å¦ä¸ŽçŽ°æœ‰æ€»çº¿åŒ¹é…进行"
+"校验。这是因为音频总线布局å¯ä»¥åœ¨è®¾ç½®è¿™ä¸ªå±žæ€§åŽå†åŠ è½½ã€‚å¦‚æžœè¿™ä¸ªç»™å®šçš„å称在è¿"
+"行时无法解æžï¼Œå°±ä¼šå›žé€€åˆ° [code]\"Master\"[/code]。"
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -14560,9 +14582,13 @@ msgstr "æè¿°æ­¤ç›¸æœºæ¸²æŸ“哪些 3D 渲染层的剔除掩ç ã€‚"
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
-"如果为 [code]true[/code],则说明祖级的 [Viewport] 当剿­£åœ¨ä½¿ç”¨è¿™ä¸ªæ‘„åƒå¤´ã€‚"
#: doc/classes/Camera.xml
msgid ""
@@ -25230,10 +25256,11 @@ msgstr ""
"文件管ç†å™¨çš„[b]Export[/b]按钮或[method save_to_file]方法获得。"
#: doc/classes/EditorFeatureProfile.xml
+#, fuzzy
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
"将编辑器的功能é…ç½®ä¿å­˜åˆ°JSONæ ¼å¼çš„æ–‡ä»¶ä¸­ã€‚ç„¶åŽå¯ä»¥ä½¿ç”¨ç‰¹å¾é…置文件管ç†å™¨çš„[b]"
"导入[/b]按钮或[method load_from_file]按钮导入它。"
@@ -29651,9 +29678,10 @@ msgid "The default exposure used for tonemapping."
msgstr "用于色调映射的默认æ›å…‰ã€‚"
#: doc/classes/Environment.xml
+#, fuzzy
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
"è¦ä½¿ç”¨çš„色调映射模å¼ã€‚色调映射是“转æ¢â€HDR 值以适åˆåœ¨ LDR 显示器上呈现的过程。"
@@ -31930,9 +31958,10 @@ msgstr ""
"[b]注æ„:[/b]直线是使用方å‘å‘é‡è€Œä¸æ˜¯ç»ˆç‚¹æŒ‡å®šçš„。"
#: doc/classes/Geometry.xml
+#, fuzzy
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -35784,7 +35813,6 @@ msgid ""
msgstr "å…许的最大é‡å®šå‘数。用于防止无é™é‡å®šå‘循环。"
#: doc/classes/HTTPRequest.xml
-#, fuzzy
msgid ""
"If set to a value greater than [code]0.0[/code] before the request starts, "
"the HTTP request will time out after [code]timeout[/code] seconds have "
@@ -35795,11 +35823,11 @@ msgid ""
"leave this to [code]0.0[/code] to prevent the download from failing if it "
"takes too much time."
msgstr ""
-"如果设为大于 [code]0.0[/code] 的值,在ç»è¿‡ [code]timeout[/code] ç§’ä»æœª[i]完æˆ"
-"[/i]请求时,该 HTTP 请求就会超时。对于 REST API 等较å°çš„ HTTP 请求,将 "
-"[member timeout] 设为大于 [code]0.0[/code] 的值å¯ä»¥å®šæ—¶é˜²æ­¢åº”用程åºåœ¨å¤±è´¥æ—¶é™·"
-"入长时间的无å“应状æ€ã€‚ä¸‹è½½æ–‡ä»¶æ—¶è¯·ä¿æŒ [code]0.0[/code],防止在需è¦èŠ±è´¹è¾ƒé•¿æ—¶"
-"间下载时导致下载失败。"
+"如果在请求开始å‰è®¾ä¸ºå¤§äºŽ [code]0.0[/code] 的值,在ç»è¿‡ [code]timeout[/code] "
+"ç§’ä»æœª[i]完æˆ[/i]请求时,该 HTTP 请求就会超时。对于 REST API 等较å°çš„ HTTP 请"
+"求,将 [member timeout] 设为 [code]10.0[/code] 到 [code]30.0[/code] 之间的值"
+"å¯ä»¥å®šæ—¶é˜²æ­¢åº”用程åºåœ¨å¤±è´¥æ—¶é™·å…¥é•¿æ—¶é—´çš„æ— å“应状æ€ã€‚ä¸‹è½½æ–‡ä»¶æ—¶è¯·ä¿æŒ "
+"[code]0.0[/code],防止在需è¦èŠ±è´¹è¾ƒé•¿æ—¶é—´ä¸‹è½½æ—¶å¯¼è‡´ä¸‹è½½å¤±è´¥ã€‚"
#: doc/classes/HTTPRequest.xml
msgid "If [code]true[/code], multithreading is used to improve performance."
@@ -37641,7 +37669,6 @@ msgid "Controls the mouse mode. See [enum MouseMode] for more information."
msgstr "控制鼠标模å¼ã€‚详情请å‚阅 [enum MouseMode]。"
#: doc/classes/Input.xml
-#, fuzzy
msgid ""
"If [code]true[/code], similar input events sent by the operating system are "
"accumulated. When input accumulation is enabled, all input events generated "
@@ -37663,8 +37690,8 @@ msgstr ""
"输入累积在默认情况下是å¯ç”¨çš„。它å¯ä»¥è¢«ç¦ç”¨ï¼Œå°†ä»¥å¢žåŠ CPU使用率为代价,获得ç¨å¾®"
"æ›´ç²¾ç¡®åŠæ›´çµæ•的输入。在需è¦è‡ªç”±ç»˜åˆ¶çº¿æ¡çš„åº”ç”¨ä¸­ï¼Œä¸€èˆ¬åº”ç”¨åœ¨ç”¨æˆ·ç»˜åˆ¶çº¿æ¡æ—¶ç¦"
"用输入累加,以获得紧跟实际输入的结果。\n"
-"[b]注æ„:[/b]默认[i]ç¦ç”¨[/i]输入累积是出于å‘åŽå…¼å®¹çš„缘故。然而我们推è那些ä¸"
-"需è¦éžå¸¸æ´»è·ƒè¾“入的游æˆå°†å…¶å¯ç”¨ï¼Œèƒ½å¤Ÿé™ä½Ž CPU å ç”¨ã€‚"
+"[b]注æ„:[/b]输入累积是默认[i]å¯ç”¨[/i]的。推è那些ä¸éœ€è¦éžå¸¸æ´»è·ƒè¾“入的游æˆä¿"
+"æŒå¯ç”¨ï¼Œèƒ½å¤Ÿé™ä½Ž CPU å ç”¨ã€‚"
#: doc/classes/Input.xml
msgid "Emitted when a joypad device has been connected or disconnected."
@@ -38390,7 +38417,6 @@ msgid "Input event type for mouse motion events."
msgstr "鼠标移动事件的输入事件类型。"
#: doc/classes/InputEventMouseMotion.xml
-#, fuzzy
msgid ""
"Contains mouse and pen motion information. Supports relative, absolute "
"positions and speed. See [method Node._input].\n"
@@ -38407,9 +38433,11 @@ msgid ""
"avoid visible gaps in lines if the user is moving the mouse quickly."
msgstr ""
"包å«é¼ æ ‡å’Œç¬”çš„è¿åŠ¨ä¿¡æ¯ã€‚支æŒç›¸å¯¹ã€ç»å¯¹ä½ç½®å’Œé€Ÿåº¦ã€‚è§ [method Node._input]。\n"
-"[b]注æ„:[/b]默认情况下,这个事件能够æ¯å¸§å‘出多次,æä¾›æ›´ç²¾ç¡®çš„输入报告,但代"
-"价是更高的 CPU å ç”¨ã€‚ä½ å¯ä»¥å°† [member Input.use_accumulated_input] 设为 "
-"[code]true[/code],将æ¯å¸§ä¸­çš„多个事件åˆå¹¶ä¸ºå•个事件进行å‘é€ã€‚\n"
+"[b]注æ„:[/b]è¿™ä¸ªäº‹ä»¶çš„è¡Œä¸ºå— [member Input.use_accumulated_input] å–值的影"
+"å“。设为 [code]true[/code] 时(默认),从æ“作系统获å–到的鼠标/笔的移动事件会"
+"被åˆå¹¶ï¼Œæ¯ä¸ªæ¸²æŸ“帧最多åªä¼šå‘出一个累积事件。设为 [code]false[/code] 时,收到"
+"几个事件就会å‘å‡ºå‡ ä¸ªäº‹ä»¶ï¼Œå³æ¯ä¸ªæ¸²æŸ“帧å¯èƒ½å‘出多次,能够精确地汇报输入,但代"
+"价是å ç”¨ CPU。\n"
"[b]注æ„:[/b]如果你使用 InputEventMouseMotion æ¥ç”»çº¿ï¼Œè¯·è€ƒè™‘åŒæ—¶å®žçް"
"[url=https://zh.wikipedia.org/zh-cn/"
"%E5%B8%83%E9%9B%B7%E6%A3%AE%E6%BC%A2%E5%A7%86%E7%9B%B4%E7%B7%9A%E6%BC%94%E7%AE%97%E6%B3%95]"
@@ -38420,13 +38448,12 @@ msgid "Mouse and input coordinates"
msgstr "é¼ æ ‡å’Œè¾“å…¥åæ ‡"
#: doc/classes/InputEventMouseMotion.xml
-#, fuzzy
msgid ""
"Returns [code]true[/code] when using the eraser end of a stylus pen.\n"
"[b]Note:[/b] This property is implemented on Linux, macOS and Windows."
msgstr ""
-"返回键盘布局的数é‡ã€‚\n"
-"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。"
+"使用手写笔的橡皮端时,返回 [code]true[/code]。\n"
+"[b]注æ„:[/b]这个属性在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/InputEventMouseMotion.xml
msgid ""
@@ -40989,10 +41016,11 @@ msgid "The tint of [Font]'s outline."
msgstr "对 [Font] 轮廓的染色。"
#: doc/classes/Label3D.xml
+#, fuzzy
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -41010,10 +41038,11 @@ msgid "The size of one pixel's width on the label to scale it in 3D."
msgstr "标签上一个åƒç´ å®½åº¦çš„大å°ï¼Œä»¥ 3D 缩放。"
#: doc/classes/Label3D.xml
+#, fuzzy
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -41048,8 +41077,9 @@ msgid "If set, lights in the environment affect the label."
msgstr "如果打开,环境中的ç¯å…‰ä¼šå½±å“该标签。"
#: doc/classes/Label3D.xml
+#, fuzzy
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr "如果打开,从åŽé¢ä¹Ÿå¯ä»¥çœ‹åˆ°æ–‡æœ¬ï¼Œå¦‚æžœä¸æ‰“开,从åŽé¢çœ‹å®ƒæ˜¯ä¸å¯è§çš„。"
@@ -46047,6 +46077,7 @@ msgid "An instance of a [NavigationMesh]."
msgstr "[NavigationMesh] 的一个实例。"
#: doc/classes/NavigationMeshInstance.xml
+#, fuzzy
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
@@ -46060,7 +46091,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -46384,6 +46415,7 @@ msgid "A region of the 2D navigation map."
msgstr "2D 导航地图上的一个地区。"
#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
msgid ""
"A region of the navigation map. It tells the [Navigation2DServer] what can "
"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
@@ -46397,7 +46429,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -46551,6 +46583,54 @@ msgstr ""
msgid "Control activation of this server."
msgstr "控制这个æœåŠ¡å™¨æ˜¯å¦æ¿€æ´»ã€‚"
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr "返回连接的当å‰çжæ€ã€‚è§ [enum ConnectionStatus]。"
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+#, fuzzy
+msgid "Set the max packet size that this peer can handle."
+msgstr "设置该实例使用的光照图。"
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -50248,8 +50328,14 @@ msgid "See [enum ShadowDetail]."
msgstr "è§ [enum ShadowDetail]。"
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
-msgstr "è§ [enum ShadowMode]。"
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
+msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
@@ -50259,9 +50345,11 @@ msgstr ""
"é˜´å½±è¢«æ¸²æŸ“åˆ°ä¸€ä¸ªåŒæŠ›ç‰©é¢çº¹ç†ã€‚比 [constant SHADOW_CUBE] 更快,但质é‡è¾ƒå·®ã€‚"
#: doc/classes/OmniLight.xml
+#, fuzzy
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
"阴影被渲染æˆä¸€ä¸ªç«‹æ–¹ä½“贴图。比 [constant SHADOW_DUAL_PARABOLOID] æ…¢ï¼Œä½†è´¨é‡æ›´"
"高。"
@@ -57224,9 +57312,8 @@ msgstr "改å˜ç»™å®šç´¢å¼•处的字节。"
#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml
#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml
#: doc/classes/PoolVector3Array.xml
-#, fuzzy
msgid "Sorts the elements of the array in ascending order."
-msgstr "从数组中删除ä½äºŽç´¢å¼•的元素。"
+msgstr "将该数组中的元素按å‡åºæŽ’列。"
#: doc/classes/PoolByteArray.xml
msgid ""
@@ -63789,14 +63876,14 @@ msgid ""
"Generates a pseudo-random float between [code]0.0[/code] and [code]1.0[/"
"code] (inclusive)."
msgstr ""
-"产生一个[code]0.0[/code]å’Œ[code]1.0[/code]ï¼ˆåŒ…æ‹¬ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœºæµ®ç‚¹æ•°ã€‚"
+"生æˆä¸€ä¸ª[code]0.0[/code]å’Œ[code]1.0[/code]ï¼ˆåŒ…æ‹¬ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœºæµ®ç‚¹æ•°ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
"Generates a pseudo-random float between [code]from[/code] and [code]to[/"
"code] (inclusive)."
msgstr ""
-"产生一个[code]from[/code]å’Œ[code]to[/code]ï¼ˆåŒ…æ‹¬ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœºæµ®ç‚¹æ•°ã€‚"
+"生æˆä¸€ä¸ª[code]from[/code]å’Œ[code]to[/code]ï¼ˆåŒ…æ‹¬ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœºæµ®ç‚¹æ•°ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -63805,8 +63892,8 @@ msgid ""
"specified [code]mean[/code] and a standard [code]deviation[/code]. This is "
"also called Gaussian distribution."
msgstr ""
-"产生一个[url=https://en.wikipedia.org/wiki/Normal_distribution]æ­£æ€åˆ†å¸ƒ[/url]"
-"çš„ä¼ªéšæœºæ•°ï¼Œä½¿ç”¨Box-Mullerå˜æ¢ï¼Œå…·æœ‰æŒ‡å®šçš„[code]mean[/code]和标准"
+"生æˆä¸€ä¸ª[url=https://en.wikipedia.org/wiki/Normal_distribution]æ­£æ€åˆ†å¸ƒ[/url]"
+"çš„ä¼ªéšæœºæ•°ï¼Œä½¿ç”¨ Box-Muller å˜æ¢ï¼Œå…·æœ‰æŒ‡å®šçš„ [code]mean[/code] 和标准 "
"[code]deviation[/code]。这也被称为高斯分布。"
#: doc/classes/RandomNumberGenerator.xml
@@ -63814,16 +63901,16 @@ msgid ""
"Generates a pseudo-random 32-bit unsigned integer between [code]0[/code] and "
"[code]4294967295[/code] (inclusive)."
msgstr ""
-"产生一个[code]0[/code]å’Œ[code]4294967295[/code](å«ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœº32使— ç¬¦"
-"å·æ•´æ•°ã€‚"
+"生æˆä¸€ä¸ª [code]0[/code] å’Œ [code]4294967295[/code](å«ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœº 32 "
+"使— ç¬¦å·æ•´æ•°ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
"Generates a pseudo-random 32-bit signed integer between [code]from[/code] "
"and [code]to[/code] (inclusive)."
msgstr ""
-"产生一个[code]to[/code]å’Œ[code]from[/code](å«ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœº32使œ‰ç¬¦å·æ•´"
-"数。"
+"生æˆä¸€ä¸ª [code]to[/code] å’Œ [code]from[/code](å«ç«¯ç‚¹ï¼‰ä¹‹é—´çš„ä¼ªéšæœº 32 使œ‰ç¬¦"
+"å·æ•´æ•°ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid "Setups a time-based seed to generator."
@@ -63926,20 +64013,20 @@ msgstr "使该 [Range] åœæ­¢ä¸Žä»»ä½•å…¶ä»– Range 共享其æˆå‘˜å˜é‡ã€‚"
#: doc/classes/Range.xml
msgid ""
"If [code]true[/code], [member value] may be greater than [member max_value]."
-msgstr "如果为 [code]true[/code],[member value]å¯èƒ½å¤§äºŽ[member max_value]。"
+msgstr "如果为 [code]true[/code],[member value] å¯èƒ½å¤§äºŽ [member max_value]。"
#: doc/classes/Range.xml
msgid ""
"If [code]true[/code], [member value] may be less than [member min_value]."
-msgstr "如果为 [code]true[/code],[member value]å¯èƒ½å°äºŽ[member min_value]。"
+msgstr "如果为 [code]true[/code],[member value] å¯èƒ½å°äºŽ [member min_value]。"
#: doc/classes/Range.xml
msgid ""
"If [code]true[/code], and [code]min_value[/code] is greater than 0, "
"[code]value[/code] will be represented exponentially rather than linearly."
msgstr ""
-"如果为 [code]true[/code],并且[code]min_value[/code]大于0,[code]value[/code]"
-"将以指数方å¼è€Œä¸æ˜¯çº¿æ€§æ–¹å¼è¡¨ç¤ºã€‚"
+"如果为 [code]true[/code],并且 [code]min_value[/code] 大于 0,[code]value[/"
+"code] 将以指数方å¼è€Œä¸æ˜¯çº¿æ€§æ–¹å¼è¡¨ç¤ºã€‚"
#: doc/classes/Range.xml
msgid ""
@@ -63961,12 +64048,12 @@ msgid ""
"multiplied by [code]page[/code] over the difference between [code]min_value[/"
"code] and [code]max_value[/code]."
msgstr ""
-"页é¢å¤§å°ã€‚主è¦ç”¨äºŽ[ScrollBar]。ScrollBar的长度是它的尺寸乘以[code]page[/code]"
-"超过[code]min_value[/code]和[code]max_value[/code]之间的差值。"
+"页é¢å¤§å°ã€‚主è¦ç”¨äºŽ [ScrollBar]。ScrollBar 的长度是它的尺寸乘以 [code]page[/"
+"code] 超过 [code]min_value[/code] 和 [code]max_value[/code] 之间的差值。"
#: doc/classes/Range.xml
msgid "The value mapped between 0 and 1."
-msgstr "该值在0和1之间进行映射。"
+msgstr "该值在 0 和 1 之间进行映射。"
#: doc/classes/Range.xml
msgid ""
@@ -63982,9 +64069,9 @@ msgid ""
"[code]value[/code] will first be rounded to a multiple of [code]step[/code] "
"then rounded to the nearest integer."
msgstr ""
-"如果大于0,[code]value[/code]将总是被四èˆäº”入为[code]step[/code]çš„å€æ•°ã€‚如果"
-"[code]rounded[/code]也是[code]true[/code],[code]value[/code]将首先被四èˆäº”å…¥"
-"为[code]step[/code]çš„å€æ•°ï¼Œç„¶åŽèˆå…¥ä¸ºæœ€è¿‘的整数。"
+"如果大于 0,[code]value[/code] 将总是被四èˆäº”入为 [code]step[/code] çš„å€æ•°ã€‚"
+"如果 [code]rounded[/code] 也是 [code]true[/code],[code]value[/code] 将首先被"
+"å››èˆäº”入为 [code]step[/code] çš„å€æ•°ï¼Œç„¶åŽèˆå…¥ä¸ºæœ€è¿‘的整数。"
#: doc/classes/Range.xml
msgid "Range's current value."
@@ -63995,8 +64082,8 @@ msgid ""
"Emitted when [member min_value], [member max_value], [member page], or "
"[member step] change."
msgstr ""
-"在 [member min_value], [member max_value], [member page], 或 [member step] 改"
-"å˜æ—¶é‡Šæ”¾ä¿¡å·ã€‚"
+"在 [member min_value]ã€[member max_value]ã€[member page]ã€[member step] 改å˜"
+"时释放信å·ã€‚"
#: doc/classes/Range.xml
msgid ""
@@ -64039,12 +64126,12 @@ msgstr ""
"以便找到沿光线路径最近的对象。\n"
"RayCast å¯ä»¥å¿½ç•¥æŸäº›å¯¹è±¡ï¼Œæ–¹æ³•是通过 [code]add_exception[/code] 将它们添加到"
"例外列表中,或者通过使用碰撞层和掩ç è®¾ç½®ï¼Œè¿›è¡Œé€‚当的过滤。\n"
-"RayCast å¯ä»¥é…置为报告与 [Area]([member collide_with_areas]) å’Œ/或 "
-"[PhysicsBody]([member collide_with_bodies]) 的碰撞。\n"
+"RayCast å¯ä»¥é…置为报告与 [Area]([member collide_with_areas])和/或 "
+"[PhysicsBody]([member collide_with_bodies])的碰撞。\n"
"åªæœ‰å¯ç”¨çš„光线投射æ‰èƒ½æ£€æµ‹ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žã€‚\n"
-"RayCast 计算æ¯ä¸ªç‰©ç†å¸§çš„交集(å‚阅 [Node]),并将结果缓存起æ¥ï¼Œä»¥ä¾¿ç¨åŽä½¿ç”¨ï¼Œ"
-"直到下一帧。如果物ç†å¸§ä¹‹é—´ï¼ˆæˆ–åŒä¸€å¸§æœŸé—´ï¼‰éœ€è¦å¤šæ¬¡æ£€æµ‹ï¼Œè¯·åœ¨è°ƒæ•´å…‰çº¿æŠ•å°„åŽä½¿"
-"用[method force_raycast_update]。"
+"RayCast 计算æ¯ä¸ªç‰©ç†å¸§çš„äº¤é›†ï¼ˆè§ [Node]),并将结果缓存起æ¥ï¼Œä»¥ä¾¿ç¨åŽä½¿ç”¨ï¼Œç›´"
+"到下一帧。如果物ç†å¸§ä¹‹é—´ï¼ˆæˆ–åŒä¸€å¸§æœŸé—´ï¼‰éœ€è¦å¤šæ¬¡æ£€æµ‹ï¼Œè¯·åœ¨è°ƒæ•´å…‰çº¿æŠ•å°„åŽä½¿ç”¨ "
+"[method force_raycast_update]。"
#: doc/classes/RayCast.xml doc/classes/RayCast2D.xml
msgid ""
@@ -64072,7 +64159,7 @@ msgid ""
msgstr ""
"更新射线的碰撞信æ¯ã€‚ä½¿ç”¨æ­¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次 "
"[code]_physics_process[/code] 调用,例如,如果光线或其父级已更改状æ€ã€‚\n"
-"[b]注æ„:[/b][code]enabled[/code]ä¸éœ€è¦æ­¤åŠŸèƒ½ã€‚"
+"[b]注æ„:[/b][code]enabled[/code] ä¸éœ€è¦æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/RayCast.xml doc/classes/RayCast2D.xml
msgid ""
@@ -64098,7 +64185,7 @@ msgid ""
"[b]Note:[/b] Bit indices range from 0-19."
msgstr ""
"如果通过的ä½ç´¢å¼•被打开,则返回 [code]true[/code]。\n"
-"[b]注æ„:[/b]使Œ‡æ•°èŒƒå›´ä¸º0-19。"
+"[b]注æ„:[/b]使Œ‡æ•°èŒƒå›´ä¸º 0-19。"
#: doc/classes/RayCast.xml doc/classes/RayCast2D.xml
msgid ""
@@ -64136,8 +64223,8 @@ msgid ""
"Sets the bit index passed to the [code]value[/code] passed.\n"
"[b]Note:[/b] Bit indexes range from 0-19."
msgstr ""
-"将传递的ä½ç´¢å¼•设置为传递的[code]值[/code]。\n"
-"[b]注æ„:[/b]ä½ç´¢å¼•的范围是0-19。"
+"将传递的ä½ç´¢å¼•设置为传递的 [code]value[/code]。\n"
+"[b]注æ„:[/b]ä½ç´¢å¼•的范围是 0-19。"
#: doc/classes/RayCast.xml doc/classes/RayCast2D.xml
msgid ""
@@ -64172,9 +64259,9 @@ msgid ""
"If set to [code]Color(0.0, 0.0, 0.0)[/code] (by default), the color set in "
"[member ProjectSettings.debug/shapes/collision/shape_color] is used."
msgstr ""
-"如果在 [b]Debug[/b] èœå•中å¯ç”¨äº†å¯è§ç¢°æ’žå½¢çж [b]Visible Collision Shapes[/"
-"b],则å¯ç”¨äºŽåœ¨ç¼–辑器中和è¿è¡Œæ—¶ç»˜åˆ¶å½¢çŠ¶çš„è‡ªå®šä¹‰é¢œè‰²ã€‚å¦‚æžœ [RayCast] 与æŸç‰©ä½“å‘"
-"生碰撞,此颜色将在è¿è¡Œæ—¶çªå‡ºæ˜¾ç¤ºã€‚\n"
+"如果在[b]调试[/b]èœå•中å¯ç”¨äº†[b]显示碰撞区域[/b],则å¯ç”¨äºŽåœ¨ç¼–辑器中和è¿è¡Œæ—¶"
+"绘制形状的自定义颜色。如果 [RayCast] 与æŸç‰©ä½“å‘生碰撞,此颜色将在è¿è¡Œæ—¶çªå‡ºæ˜¾"
+"示。\n"
"如果设置为 [code]Color(0.0, 0.0, 0.0)[/code](默认),则使用 [member "
"ProjectSettings.debug/shapes/collision/shape_color] 中设置的颜色。"
@@ -64186,8 +64273,8 @@ msgid ""
"shape to be visible at run-time."
msgstr ""
"如果设置为 [code]1[/code],则将一æ¡çº¿ç”¨ä½œè°ƒè¯•形状。å¦åˆ™ï¼Œå°†ç»˜åˆ¶ä¸€ä¸ªæˆªæ–­çš„金字"
-"å¡”æ¥è¡¨ç¤º [RayCast]。需è¦åœ¨ [b]调试[/b] èœå•中å¯ç”¨å¯è§ç¢°æ’žå½¢çж [b]Visible "
-"Collision Shapes[/b],以便调试形状在è¿è¡Œæ—¶å¯è§ã€‚"
+"å¡”æ¥è¡¨ç¤º [RayCast]。需è¦åœ¨[b]调试[/b]èœå•中å¯ç”¨[b]显示碰撞区域[/b],以便调试"
+"形状在è¿è¡Œæ—¶å¯è§ã€‚"
#: doc/classes/RayCast.xml doc/classes/RayCast2D.xml
msgid "If [code]true[/code], collisions will be reported."
@@ -64259,9 +64346,9 @@ msgid ""
"itself from whatever is touching its far endpoint. It's often useful for "
"characters."
msgstr ""
-"用于3D碰撞的射线形状,它å¯ä»¥è¢«è®¾ç½®æˆä¸€ä¸ª[PhysicsBody]或[Area]。一æ¡å°„çº¿å¹¶ä¸æ˜¯"
-"真正的碰撞体;然而,它试图将自己与其远端点接触的东西分开。这通常对角色很有"
-"用。"
+"用于 3D 碰撞的射线形状,它å¯ä»¥è¢«è®¾ç½®æˆä¸€ä¸ª [PhysicsBody] 或 [Area]。一æ¡å°„线"
+"并䏿˜¯çœŸæ­£çš„碰撞体;然而,它试图将自己与其远端点接触的东西分开。这通常对角色"
+"很有用。"
#: doc/classes/RayShape.xml doc/classes/RayShape2D.xml
msgid "The ray's length."
@@ -64301,11 +64388,11 @@ msgstr ""
#: doc/classes/Rect2.xml
msgid "Constructs a [Rect2] by position and size."
-msgstr "按ä½ç½®å’Œå¤§å°æž„造一个[Rect2]。"
+msgstr "按ä½ç½®å’Œå¤§å°æž„造一个 [Rect2]。"
#: doc/classes/Rect2.xml
msgid "Constructs a [Rect2] by x, y, width, and height."
-msgstr "通过xã€yã€å®½åº¦å’Œé«˜åº¦æž„造一个[Rect2]。"
+msgstr "通过 xã€yã€å®½åº¦å’Œé«˜åº¦æž„造一个 [Rect2]。"
#: doc/classes/Rect2.xml
msgid ""
@@ -68818,7 +68905,6 @@ msgid ""
msgstr "返回该 [SceneTreeTween] ç›®å‰æ˜¯å¦æ­£åœ¨æ‰§è¡Œï¼Œå³æœªæš‚åœä¸”未完æˆã€‚"
#: doc/classes/SceneTreeTween.xml
-#, fuzzy
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
@@ -68832,7 +68918,7 @@ msgstr ""
"[SceneTreeTween]ï¼ˆå³ [method SceneTree.get_processed_tweens] 返回的数组中包å«"
"这个 [SceneTreeTween])。[SceneTreeTween] 失效的情况有:补间完æˆã€è¢«é”€æ¯ã€ä½¿"
"用 [code]SceneTreeTween.new()[/code] 创建。无效的 [SceneTreeTween] ä¸èƒ½è¿½åŠ  "
-"[Tweener]。"
+"[Tweener]。但你ä»ç„¶èƒ½å¤Ÿä½¿ç”¨ [method interpolate_value]。"
#: doc/classes/SceneTreeTween.xml
msgid "Aborts all tweening operations and invalidates the [SceneTreeTween]."
@@ -68879,7 +68965,6 @@ msgstr ""
"的默认缓动类型。"
#: doc/classes/SceneTreeTween.xml
-#, fuzzy
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
@@ -70738,13 +70823,13 @@ msgstr "å¯ç”¨æ­¤èŠ‚ç‚¹çš„å‘ˆçŽ°ã€‚å°† [member visible] 更改为 [code]true[/co
msgid ""
"Transforms [code]local_point[/code] from this node's local space to world "
"space."
-msgstr "å°† [code]local_point[/code] 从该节点的本地空间转æ¢ä¸ºä¸–界空间。"
+msgstr "å°† [code]local_point[/code] 从这个节点的局部空间转æ¢ä¸ºä¸–界空间。"
#: doc/classes/Spatial.xml
msgid ""
"Transforms [code]global_point[/code] from world space to this node's local "
"space."
-msgstr "å°† [code]global_point[/code] 从世界空间转æ¢åˆ°è¿™ä¸ªèŠ‚ç‚¹çš„æœ¬åœ°ç©ºé—´ã€‚"
+msgstr "å°† [code]global_point[/code] 从世界空间转æ¢åˆ°è¿™ä¸ªèŠ‚ç‚¹çš„å±€éƒ¨ç©ºé—´ã€‚"
#: doc/classes/Spatial.xml
msgid ""
@@ -70754,7 +70839,7 @@ msgid ""
"offset of [code](2, 0, 0)[/code] would actually add 20 ([code]2 * 10[/code]) "
"to the X coordinate."
msgstr ""
-"通过给定的åç§»é‡ [Vector3] 改å˜èŠ‚ç‚¹çš„ä½ç½®ã€‚\n"
+"通过给定的åç§»é‡ [Vector3] 改å˜è¯¥èŠ‚ç‚¹çš„ä½ç½®ã€‚\n"
"注æ„,平移 [code]offset[/code] å—节点缩放的影å“,所以如果按例如 [code]"
"(10,1,1)[/code] 进行缩放,平移 [code](2,0,0)[/code] 实际上会在 X åæ ‡ä¸Šå¢žåŠ  "
"20 ([code]2 * 10[/code])。"
@@ -70762,22 +70847,21 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
"Changes the node's position by the given offset [Vector3] in local space."
-msgstr "通过给定的åç§»é‡ [Vector3] 改å˜èŠ‚ç‚¹åœ¨å±€éƒ¨ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
+msgstr "通过给定的局部空间åç§»é‡ [Vector3] 改å˜è¯¥èŠ‚ç‚¹çš„ä½ç½®ã€‚"
#: doc/classes/Spatial.xml
msgid "Updates the [SpatialGizmo] of this node."
-msgstr "更新该节点的 [SpatialGizmo]。"
+msgstr "更新这个节点的 [SpatialGizmo]。"
#: doc/classes/Spatial.xml
msgid ""
"The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] "
"as custom visualization and editing handles in Editor."
msgstr ""
-"此节点的 [SpatialGizmo]。例如在 [EditorSpatialGizmo] 中用作编辑器中的自定义å¯"
-"视化和编辑手柄。"
+"这个节点的 [SpatialGizmo]。例如在 [EditorSpatialGizmo] 中用作编辑器中的自定义"
+"å¯è§†åŒ–和编辑手柄。"
#: doc/classes/Spatial.xml
-#, fuzzy
msgid ""
"Rotation part of the global transformation in radians, specified in terms of "
"YXZ-Euler angles in the format (X angle, Y angle, Z angle).\n"
@@ -70789,7 +70873,7 @@ msgid ""
"point numbers. Therefore, applying affine operations on the rotation "
"\"vector\" is not meaningful."
msgstr ""
-"å±€éƒ¨å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ä»¥å¼§åº¦è¡¨ç¤ºï¼Œä»¥ YXZ-Euler 角的形å¼è¡¨ç¤ºï¼ˆX è§’ã€Y è§’ã€Z "
+"å…¨å±€å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ï¼Œå•ä½ä¸ºå¼§åº¦ï¼Œä»¥ YXZ 欧拉角的形å¼è¡¨ç¤ºï¼ˆX è§’ã€Y è§’ã€Z "
"角)。\n"
"[b]注æ„:[/b]在数学æ„ä¹‰ä¸Šï¼Œæ—‹è½¬æ˜¯ä¸€ä¸ªçŸ©é˜µè€Œä¸æ˜¯ä¸€ä¸ªå‘é‡ã€‚这三个欧拉角是旋转矩"
"é˜µæ¬§æ‹‰è§’å‚æ•°åŒ–çš„ä¸‰ä¸ªç‹¬ç«‹å‚æ•°ï¼Œå­˜å‚¨åœ¨ [Vector3] æ•°æ®ç»“æž„ä¸­å¹¶ä¸æ˜¯å› ä¸ºæ—‹è½¬æ˜¯ä¸€ä¸ª"
@@ -70798,13 +70882,13 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid "World space (global) [Transform] of this node."
-msgstr "此节点的世界空间(全局)[Transform]。"
+msgstr "è¿™ä¸ªèŠ‚ç‚¹çš„ä¸–ç•Œç©ºé—´ï¼ˆå…¨å±€ï¼‰å˜æ¢ [Transform]。"
#: doc/classes/Spatial.xml
msgid ""
"Global position of this node. This is equivalent to [code]global_transform."
"origin[/code]."
-msgstr ""
+msgstr "这个节点的全局ä½ç½®ã€‚与 [code]global_transform.origin[/code] 等价。"
#: doc/classes/Spatial.xml
msgid ""
@@ -70818,7 +70902,7 @@ msgid ""
"point numbers. Therefore, applying affine operations on the rotation "
"\"vector\" is not meaningful."
msgstr ""
-"å±€éƒ¨å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ä»¥å¼§åº¦è¡¨ç¤ºï¼Œä»¥ YXZ-Euler 角的形å¼è¡¨ç¤ºï¼ˆX è§’ã€Y è§’ã€Z "
+"å±€éƒ¨å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ï¼Œå•ä½ä¸ºå¼§åº¦ï¼Œä»¥ YXZ 欧拉角的形å¼è¡¨ç¤ºï¼ˆX è§’ã€Y è§’ã€Z "
"角)。\n"
"[b]注æ„:[/b]在数学æ„ä¹‰ä¸Šï¼Œæ—‹è½¬æ˜¯ä¸€ä¸ªçŸ©é˜µè€Œä¸æ˜¯ä¸€ä¸ªå‘é‡ã€‚这三个欧拉角是旋转矩"
"é˜µæ¬§æ‹‰è§’å‚æ•°åŒ–çš„ä¸‰ä¸ªç‹¬ç«‹å‚æ•°ï¼Œå­˜å‚¨åœ¨ [Vector3] æ•°æ®ç»“æž„ä¸­å¹¶ä¸æ˜¯å› ä¸ºæ—‹è½¬æ˜¯ä¸€ä¸ª"
@@ -70839,17 +70923,17 @@ msgid ""
"transformation matrices in Godot, the scale values will either be all "
"positive or all negative."
msgstr ""
-"æœ¬åœ°å˜æ¢ä¸­çš„缩放。\n"
+"å±€éƒ¨å˜æ¢çš„缩放部分。\n"
"[b]注æ„:[/b]3D ä¸­ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— æ³•分解出正负混åˆçš„缩放的。由于 Godot 中使用å˜"
"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼Œå¾—到的缩放值è¦ä¹ˆå…¨æ­£ã€è¦ä¹ˆå…¨è´Ÿã€‚"
#: doc/classes/Spatial.xml
msgid "Local space [Transform] of this node, with respect to the parent node."
-msgstr "该节点相对于父节点的局部空间 [Transform]。"
+msgstr "这个节点相对于父节点的局部空间 [Transform]。"
#: doc/classes/Spatial.xml
msgid "Local translation of this node."
-msgstr "æ­¤èŠ‚ç‚¹çš„å±€éƒ¨å˜æ¢ã€‚"
+msgstr "è¿™ä¸ªèŠ‚ç‚¹çš„å±€éƒ¨å˜æ¢ã€‚"
#: doc/classes/Spatial.xml
msgid ""
@@ -72817,10 +72901,11 @@ msgid "The size of one pixel's width on the sprite to scale it in 3D."
msgstr "ç²¾çµä¸Šä¸€ä¸ªåƒç´ å®½åº¦çš„大å°ï¼Œä»¥ 3D 缩放。"
#: doc/classes/SpriteBase3D.xml
+#, fuzzy
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -76414,9 +76499,10 @@ msgid "Sets the text for a specific line."
msgstr "设置特定行的文本。"
#: doc/classes/TextEdit.xml
+#, fuzzy
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
"如果 [code]bookmark[/code] 为 true,则为行 [code]line[/code] 设置书签。如果 "
@@ -80281,7 +80367,7 @@ msgid ""
"is_selected]."
msgstr ""
"返回当å‰èŽ·å¾—ç„¦ç‚¹çš„åˆ—ï¼Œå¦‚æžœæ²¡æœ‰ç„¦ç‚¹åˆ—ï¼Œåˆ™è¿”å›ž -1。\n"
-"在[constant SELECT_SINGLE] 模å¼ä¸‹ï¼Œç„¦ç‚¹åˆ—是被选中的列。在 [constant "
+"在 [constant SELECT_SINGLE] 模å¼ä¸‹ï¼Œç„¦ç‚¹åˆ—是被选中的列。在 [constant "
"SELECT_ROW] 模å¼ä¸‹ï¼Œå¦‚果有任æ„项被选中,焦点列总是 0。在 [constant "
"SELECT_MULTI] 模å¼ä¸‹ï¼Œç„¦ç‚¹åˆ—是焦点光标下的列,但ä¸ä¸€å®šæœ‰åˆ—被选中。\n"
"è¦åˆ¤æ–­ä¸€ä¸ªé¡¹çš„æŸä¸€åˆ—æ˜¯å¦è¢«é€‰ä¸­ï¼Œè¯·ä½¿ç”¨ [method TreeItem.is_selected]。"
@@ -80306,12 +80392,12 @@ msgid ""
"will use their \"min_width\" in a similar fashion to [member Control."
"size_flags_stretch_ratio]."
msgstr ""
-"设置一个列的最å°å®½åº¦ã€‚拥有“Expandâ€æ ‡å¿—的列将以类似于 [member Control."
+"设置æŸä¸€åˆ—的最å°å®½åº¦ã€‚拥有“Expandâ€æ ‡å¿—的列将以类似于 [member Control."
"size_flags_stretch_ratio] 的方å¼ä½¿ç”¨å…¶â€œmin_widthâ€æœ€å°å®½åº¦ã€‚"
#: doc/classes/Tree.xml
msgid "Sets the title of a column."
-msgstr "设置一个列的标题。"
+msgstr "设置æŸä¸€åˆ—的标题。"
#: doc/classes/Tree.xml
msgid ""
@@ -80485,7 +80571,7 @@ msgid ""
"other flags."
msgstr ""
"ç¦ç”¨æ‰€æœ‰æ”¾ç½®éƒ¨åˆ†ï¼Œä½†ä»ç„¶å…许通过 [method get_drop_section_at_position] 检"
-"测“物å“上â€çš„æ”¾ç½®éƒ¨åˆ†ã€‚\n"
+"测“项目上â€çš„æ”¾ç½®éƒ¨åˆ†ã€‚\n"
"[b]注æ„:[/b]è¿™æ˜¯é»˜è®¤çš„æ ‡å¿—ï¼Œå½“ä¸Žå…¶ä»–æ ‡å¿—ç»“åˆæ—¶ï¼Œå®ƒæ²¡æœ‰æ•ˆæžœã€‚"
#: doc/classes/Tree.xml
@@ -80549,7 +80635,7 @@ msgid ""
"Draws the guidelines if not zero, this acts as a boolean. The guideline is a "
"horizontal line drawn at the bottom of each item."
msgstr ""
-"如果ä¸ä¸ºé›¶å°±ç»˜åˆ¶å‚考线,这作为一个布尔值。å‚考线是在æ¯ä¸ªé¡¹çš„åº•éƒ¨ç”»çš„ä¸€æ¡æ°´å¹³"
+"如果ä¸ä¸ºé›¶å°±ç»˜åˆ¶å‚考线,行为类似于布尔值。å‚考线是在æ¯ä¸ªé¡¹çš„åº•éƒ¨ç”»çš„ä¸€æ¡æ°´å¹³"
"线。"
#: doc/classes/Tree.xml
@@ -80557,8 +80643,8 @@ msgid ""
"Draws the relationship lines if not zero, this acts as a boolean. "
"Relationship lines are drawn at the start of child items to show hierarchy."
msgstr ""
-"如果ä¸ä¸ºé›¶ï¼Œåˆ™ç»˜åˆ¶å…³ç³»çº¿ï¼Œè¿™ä½œä¸ºä¸€ä¸ªå¸ƒå°”值。关系线在å­é¡¹çš„开始处绘制,以显示"
-"层次结构。"
+"如果ä¸ä¸ºé›¶å°±ç»˜åˆ¶å…³ç³»çº¿ï¼Œè¡Œä¸ºç±»ä¼¼äºŽå¸ƒå°”值。关系线在å­é¡¹çš„开始处绘制,以显示层"
+"次结构。"
#: doc/classes/Tree.xml
msgid ""
@@ -80820,14 +80906,17 @@ msgid ""
msgstr "返回使用 [method set_metadata] 为指定列设置的元数æ®ã€‚"
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr "返回树中的下一个 TreeItem,如果没有,则返回一个空对象。"
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -80841,14 +80930,17 @@ msgid "Returns the parent TreeItem or a null object if there is none."
msgstr "返回父级 TreeItem,如果没有,则返回一个空对象。"
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr "返回树中的å‰ä¸€ä¸ª TreeItem,如果没有,则返回一个空对象。"
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -89175,8 +89267,12 @@ msgid "Sets the viewport's global transformation matrix."
msgstr "è®¾ç½®è§†çª—çš„å…¨å±€å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "如果为 [code]true[/code],视窗将呈现为 hdr。"
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
@@ -89274,6 +89370,22 @@ msgid ""
msgstr "设置视窗的 2D/3D 模å¼ã€‚é€‰é¡¹è§ [enum ViewportUsage] 常é‡ã€‚"
#: doc/classes/VisualServer.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+"如果为 [code]true[/code],分é…该视窗的帧缓冲时将使用完整浮点数精度(32 ä½ï¼‰è€Œ"
+"䏿˜¯åŠæµ®ç‚¹æ•°ç²¾åº¦ï¼ˆ16 ä½ï¼‰ã€‚ä»…åœ¨åŒæ—¶å¯ç”¨ [member hdr] 时有效。\n"
+"[b]注æ„:[/b]å¯ç”¨è¿™ä¸ªè®¾ç½®ä¸ä¼šæå‡æ¸²æŸ“è´¨é‡ã€‚ä½¿ç”¨å®Œæ•´æµ®ç‚¹æ•°ç²¾åº¦è¾ƒæ…¢ï¼Œä¸€èˆ¬åªæœ‰è¦"
+"求更高精度的高级ç€è‰²å™¨éœ€è¦ä½¿ç”¨ã€‚如果是è¦å‡å°‘æ¡å¸¦æ•ˆåº”,请å¯ç”¨ [member "
+"debanding]。\n"
+"[b]注æ„:[/b]仅在 GLES3 åŽç«¯ä¸­å¯ç”¨ã€‚"
+
+#: doc/classes/VisualServer.xml
msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po
index cd8d5c0eb5..59cd8b199b 100644
--- a/doc/translations/zh_TW.po
+++ b/doc/translations/zh_TW.po
@@ -948,7 +948,14 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
-msgid "Like [method print], but prints only when used in debug mode."
+msgid ""
+"Like [method print], but includes the current stack frame when running with "
+"the debugger turned on.\n"
+"Output in the console would look something like this:\n"
+"[codeblock]\n"
+"Test print\n"
+" At: res://test.gd:15:_process()\n"
+"[/codeblock]"
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -7798,8 +7805,8 @@ msgstr ""
#: doc/classes/ARVRController.xml
msgid ""
"The degree to which the controller vibrates. Ranges from [code]0.0[/code] to "
-"[code]1.0[/code] with precision [code].01[/code]. If changed, updates "
-"[member ARVRPositionalTracker.rumble] accordingly.\n"
+"[code]1.0[/code]. If changed, updates [member ARVRPositionalTracker.rumble] "
+"accordingly.\n"
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
@@ -11871,7 +11878,12 @@ msgstr ""
#: doc/classes/Camera.xml
msgid ""
-"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
+"If [code]true[/code], the ancestor [Viewport] is currently using this "
+"camera.\n"
+"If multiple cameras are in the scene, one will always be made current. For "
+"example, if two [Camera] nodes are present in the scene and only one is "
+"current, setting one camera's [member current] to [code]false[/code] will "
+"cause the other camera to be made current."
msgstr ""
#: doc/classes/Camera.xml
@@ -20299,7 +20311,7 @@ msgstr ""
msgid ""
"Saves the editor feature profile to a file in JSON format. It can then be "
"imported using the feature profile manager's [b]Import[/b] button or the "
-"[method load_from_file] button."
+"[method load_from_file] method."
msgstr ""
#: doc/classes/EditorFeatureProfile.xml
@@ -23691,7 +23703,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
"The tonemapping mode to use. Tonemapping is the process that \"converts\" "
-"HDR values to be suitable for rendering on a LDR display. (Godot doesn't "
+"HDR values to be suitable for rendering on a SDR display. (Godot doesn't "
"support rendering on HDR displays yet.)"
msgstr ""
@@ -25528,7 +25540,7 @@ msgstr ""
#: doc/classes/Geometry.xml
msgid ""
"Given an array of [Vector2]s representing tiles, builds an atlas. The "
-"returned dictionary has two keys: [code]points[/code] is a vector of "
+"returned dictionary has two keys: [code]points[/code] is an array of "
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
@@ -32638,7 +32650,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text outline. Higher priority objects will "
"be sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32654,7 +32666,7 @@ msgstr ""
msgid ""
"Sets the render priority for the text. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -32684,7 +32696,7 @@ msgstr ""
#: doc/classes/Label3D.xml
msgid ""
-"If set, text can be seen from the back as well. If not, the texture is "
+"If set, text can be seen from the back as well. If not, the text is "
"invisible when looking at it from behind."
msgstr ""
@@ -36820,7 +36832,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The cost of entering this region from another region can be controlled with "
"the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The cost of traveling distances inside this region can be controlled with "
"the [member travel_cost] multiplier."
@@ -37083,7 +37095,7 @@ msgid ""
"two regions. They must share a similar edge.\n"
"The pathfinding cost of entering this region from another region can be "
"controlled with the [member enter_cost] value.\n"
-"[b]Note[/b]: This value is not added to the path cost when the start "
+"[b]Note:[/b] This value is not added to the path cost when the start "
"position is already inside this region.\n"
"The pathfinding cost of traveling distances inside this region can be "
"controlled with the [member travel_cost] multiplier."
@@ -37201,6 +37213,52 @@ msgstr ""
msgid "Control activation of this server."
msgstr ""
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be controlled from a "
+"script."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"A [NetworkedMultiplayerPeer] implementation that can be used as a [member "
+"MultiplayerAPI.network_peer] and controlled from a script.\n"
+"Its purpose is to allow adding a new backend for the high-Level multiplayer "
+"API without needing to use GDNative."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Deliver a packet to the local [MultiplayerAPI].\n"
+"When your script receives a packet from other peers over the network "
+"(originating from the [signal packet_generated] signal on the sending peer), "
+"passing it to this method will deliver it locally."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Initialize the peer with the given [code]peer_id[/code] (must be between 1 "
+"and 2147483647)."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Set the state of the connection. See [enum NetworkedMultiplayerPeer."
+"ConnectionStatus]."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid "Set the max packet size that this peer can handle."
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerCustom.xml
+msgid ""
+"Emitted when the local [MultiplayerAPI] generates a packet.\n"
+"Your script should take this packet and send it to the requested peer over "
+"the network (which should call [method deliver_packet] with the data when "
+"it's received)."
+msgstr ""
+
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
@@ -39898,7 +39956,13 @@ msgid "See [enum ShadowDetail]."
msgstr ""
#: doc/classes/OmniLight.xml
-msgid "See [enum ShadowMode]."
+msgid ""
+"The shadow rendering mode to use for this [OmniLight]. See [enum "
+"ShadowMode].\n"
+"[b]Note:[/b] In GLES2, [constant SHADOW_CUBE] is only supported on GPUs that "
+"feature support for depth cubemaps. Old GPUs such as the Radeon HD 4000 "
+"series don't support cubemap shadows and will fall back to dual paraboloid "
+"shadows as a result."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -39910,7 +39974,8 @@ msgstr ""
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
-"SHADOW_DUAL_PARABOLOID], but higher-quality."
+"SHADOW_DUAL_PARABOLOID], but higher-quality. Only supported on GPUs that "
+"feature support for depth cubemaps."
msgstr ""
#: doc/classes/OmniLight.xml
@@ -57697,7 +57762,7 @@ msgstr ""
msgid ""
"Sets the render priority for the sprite. Higher priority objects will be "
"sorted in front of lower priority objects.\n"
-"[b]Node:[/b] This only applies if [member alpha_cut] is set to [constant "
+"[b]Note:[/b] This only applies if [member alpha_cut] is set to [constant "
"ALPHA_CUT_DISABLED] (default value).\n"
"[b]Note:[/b] This only applies to sorting of transparent objects. This will "
"not impact how transparent objects are sorted relative to opaque objects. "
@@ -60599,8 +60664,8 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
-"Bookmarks the [code]line[/code] if [code]bookmark[/code] is true. Deletes "
-"the bookmark if [code]bookmark[/code] is false.\n"
+"Bookmarks the [code]line[/code] if [code]bookmark[/code] is [code]true[/"
+"code]. Deletes the bookmark if [code]bookmark[/code] is [code]false[/code].\n"
"Bookmarks are shown in the [member breakpoint_gutter]."
msgstr ""
@@ -64234,13 +64299,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next TreeItem in the tree or a null object if there is none."
+"Returns the next sibling TreeItem in the tree or a null object if there is "
+"none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the next visible TreeItem in the tree or a null object if there is "
-"none.\n"
+"Returns the next visible sibling TreeItem in the tree or a null object if "
+"there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the first "
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
@@ -64252,13 +64318,14 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous TreeItem in the tree or a null object if there is none."
+"Returns the previous sibling TreeItem in the tree or a null object if there "
+"is none."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
-"Returns the previous visible TreeItem in the tree or a null object if there "
-"is none.\n"
+"Returns the previous visible sibling TreeItem in the tree or a null object "
+"if there is none.\n"
"If [code]wrap[/code] is enabled, the method will wrap around to the last "
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
@@ -71172,7 +71239,11 @@ msgid "Sets the viewport's global transformation matrix."
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "If [code]true[/code], the viewport renders to hdr."
+msgid ""
+"If [code]true[/code], the viewport renders to high dynamic range (HDR) "
+"instead of standard dynamic range (SDR). See also [method "
+"viewport_set_use_32_bpc_depth].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71257,6 +71328,15 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
+"If [code]true[/code], allocates the viewport's framebuffer with full "
+"floating-point precision (32-bit) instead of half floating-point precision "
+"(16-bit). Only effective if [method viewport_set_use_32_bpc_depth] is used "
+"on the same [Viewport] to set HDR to [code]true[/code].\n"
+"[b]Note:[/b] Only available on the GLES3 backend."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 969a9b2c42..8e86141e77 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -43,11 +43,7 @@ uint64_t RasterizerSceneGLES3::auto_exposure_counter = 2;
RasterizerSceneGLES3 *RasterizerSceneGLES3::singleton = nullptr;
-RasterizerSceneGLES3 *RasterizerSceneGLES3::get_singleton() {
- return singleton;
-}
-
-RendererSceneRender::GeometryInstance *RasterizerSceneGLES3::geometry_instance_create(RID p_base) {
+RenderGeometryInstance *RasterizerSceneGLES3::geometry_instance_create(RID p_base) {
RS::InstanceType type = RSG::utilities->get_base_type(p_base);
ERR_FAIL_COND_V(!((1 << type) & RS::INSTANCE_GEOMETRY_MASK), nullptr);
@@ -57,176 +53,36 @@ RendererSceneRender::GeometryInstance *RasterizerSceneGLES3::geometry_instance_c
ginstance->data->base = p_base;
ginstance->data->base_type = type;
- _geometry_instance_mark_dirty(ginstance);
+ ginstance->_mark_dirty();
return ginstance;
}
-void RasterizerSceneGLES3::geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->skeleton = p_skeleton;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->material_override = p_override;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_overlay) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->material_overlay = p_overlay;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_materials) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->surface_materials = p_materials;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ERR_FAIL_COND(!ginstance);
- ginstance->mesh_instance = p_mesh_instance;
-
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->transform = p_transform;
- ginstance->mirror = p_transform.basis.determinant() < 0;
- ginstance->data->aabb = p_aabb;
- ginstance->transformed_aabb = p_transformed_aabb;
-
- Vector3 model_scale_vec = p_transform.basis.get_scale_abs();
- // handle non uniform scale here
-
- float max_scale = MAX(model_scale_vec.x, MAX(model_scale_vec.y, model_scale_vec.z));
- float min_scale = MIN(model_scale_vec.x, MIN(model_scale_vec.y, model_scale_vec.z));
- ginstance->non_uniform_scale = max_scale >= 0.0 && (min_scale / max_scale) < 0.9;
-
- ginstance->lod_model_scale = max_scale;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->layer_mask = p_layer_mask;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->lod_bias = p_lod_bias;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->force_alpha = CLAMP(1.0 - p_transparency, 0, 1);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->fade_near = p_enable_near;
- ginstance->fade_near_begin = p_near_begin;
- ginstance->fade_near_end = p_near_end;
- ginstance->fade_far = p_enable_far;
- ginstance->fade_far_begin = p_far_begin;
- ginstance->fade_far_end = p_far_end;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->parent_fade_alpha = p_alpha;
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->use_baked_light = p_enable;
-
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->use_dynamic_gi = p_enable;
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->shader_parameters_offset = p_offset;
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->cast_double_sided_shadows = p_enable;
- _geometry_instance_mark_dirty(ginstance);
-}
-
uint32_t RasterizerSceneGLES3::geometry_instance_get_pair_mask() {
return (1 << RS::INSTANCE_LIGHT);
}
-void RasterizerSceneGLES3::geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-
+void RasterizerSceneGLES3::GeometryInstanceGLES3::pair_light_instances(const RID *p_light_instances, uint32_t p_light_instance_count) {
GLES3::Config *config = GLES3::Config::get_singleton();
- ginstance->omni_light_count = 0;
- ginstance->spot_light_count = 0;
- ginstance->omni_lights.clear();
- ginstance->spot_lights.clear();
+ omni_light_count = 0;
+ spot_light_count = 0;
+ omni_lights.clear();
+ spot_lights.clear();
for (uint32_t i = 0; i < p_light_instance_count; i++) {
- RS::LightType type = light_instance_get_type(p_light_instances[i]);
+ RS::LightType type = RasterizerSceneGLES3::get_singleton()->light_instance_get_type(p_light_instances[i]);
switch (type) {
case RS::LIGHT_OMNI: {
- if (ginstance->omni_light_count < (uint32_t)config->max_lights_per_object) {
- ginstance->omni_lights.push_back(p_light_instances[i]);
- ginstance->omni_light_count++;
+ if (omni_light_count < (uint32_t)config->max_lights_per_object) {
+ omni_lights.push_back(p_light_instances[i]);
+ omni_light_count++;
}
} break;
case RS::LIGHT_SPOT: {
- if (ginstance->spot_light_count < (uint32_t)config->max_lights_per_object) {
- ginstance->spot_lights.push_back(p_light_instances[i]);
- ginstance->spot_light_count++;
+ if (spot_light_count < (uint32_t)config->max_lights_per_object) {
+ spot_lights.push_back(p_light_instances[i]);
+ spot_light_count++;
}
} break;
default:
@@ -235,21 +91,7 @@ void RasterizerSceneGLES3::geometry_instance_pair_light_instances(GeometryInstan
}
}
-void RasterizerSceneGLES3::geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) {
-}
-
-void RasterizerSceneGLES3::geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) {
-}
-
-void RasterizerSceneGLES3::geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) {
-}
-
-void RasterizerSceneGLES3::geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-}
-
-void RasterizerSceneGLES3::geometry_instance_free(GeometryInstance *p_geometry_instance) {
+void RasterizerSceneGLES3::geometry_instance_free(RenderGeometryInstance *p_geometry_instance) {
GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
ERR_FAIL_COND(!ginstance);
GeometryInstanceSurface *surf = ginstance->surface_caches;
@@ -262,24 +104,29 @@ void RasterizerSceneGLES3::geometry_instance_free(GeometryInstance *p_geometry_i
geometry_instance_alloc.free(ginstance);
}
-void RasterizerSceneGLES3::_geometry_instance_mark_dirty(GeometryInstance *p_geometry_instance) {
- GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
- if (ginstance->dirty_list_element.in_list()) {
+void RasterizerSceneGLES3::GeometryInstanceGLES3::_mark_dirty() {
+ if (dirty_list_element.in_list()) {
return;
}
//clear surface caches
- GeometryInstanceSurface *surf = ginstance->surface_caches;
+ GeometryInstanceSurface *surf = surface_caches;
while (surf) {
GeometryInstanceSurface *next = surf->next;
- geometry_instance_surface_alloc.free(surf);
+ RasterizerSceneGLES3::get_singleton()->geometry_instance_surface_alloc.free(surf);
surf = next;
}
- ginstance->surface_caches = nullptr;
+ surface_caches = nullptr;
+
+ RasterizerSceneGLES3::get_singleton()->geometry_instance_dirty_list.add(&dirty_list_element);
+}
+
+void RasterizerSceneGLES3::GeometryInstanceGLES3::set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) {
+}
- geometry_instance_dirty_list.add(&ginstance->dirty_list_element);
+void RasterizerSceneGLES3::GeometryInstanceGLES3::set_lightmap_capture(const Color *p_sh9) {
}
void RasterizerSceneGLES3::_update_dirty_geometry_instances() {
@@ -295,7 +142,7 @@ void RasterizerSceneGLES3::_geometry_instance_dependency_changed(Dependency::Dep
case Dependency::DEPENDENCY_CHANGED_PARTICLES:
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
- static_cast<RasterizerSceneGLES3 *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata));
+ static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
} break;
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_tracker->userdata);
@@ -310,7 +157,7 @@ void RasterizerSceneGLES3::_geometry_instance_dependency_changed(Dependency::Dep
}
void RasterizerSceneGLES3::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
- static_cast<RasterizerSceneGLES3 *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata));
+ static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
}
void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(GeometryInstanceGLES3 *ginstance, uint32_t p_surface, GLES3::SceneMaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh) {
@@ -467,7 +314,7 @@ void RasterizerSceneGLES3::_geometry_instance_add_surface(GeometryInstanceGLES3
}
}
-void RasterizerSceneGLES3::_geometry_instance_update(GeometryInstance *p_geometry_instance) {
+void RasterizerSceneGLES3::_geometry_instance_update(RenderGeometryInstance *p_geometry_instance) {
GLES3::MeshStorage *mesh_storage = GLES3::MeshStorage::get_singleton();
GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_geometry_instance);
@@ -650,8 +497,7 @@ void RasterizerSceneGLES3::_update_dirty_skys() {
while (sky) {
if (sky->radiance == 0) {
- sky->mipmap_count = Image::get_image_required_mipmaps(sky->radiance_size, sky->radiance_size, Image::FORMAT_RGBA8) + 1;
-
+ sky->mipmap_count = Image::get_image_required_mipmaps(sky->radiance_size, sky->radiance_size, Image::FORMAT_RGBA8) - 2;
// Left uninitialized, will attach a texture at render time
glGenFramebuffers(1, &sky->radiance_framebuffer);
@@ -990,7 +836,7 @@ void RasterizerSceneGLES3::_update_sky_radiance(Environment *p_env, const Projec
int max_processing_layer = sky->mipmap_count;
// Update radiance cubemap
- if (sky->reflection_dirty && (sky->processing_layer >= max_processing_layer || update_single_frame)) {
+ if (sky->reflection_dirty && (sky->processing_layer > max_processing_layer || update_single_frame)) {
static const Vector3 view_normals[6] = {
Vector3(+1, 0, 0),
Vector3(-1, 0, 0),
@@ -1034,7 +880,7 @@ void RasterizerSceneGLES3::_update_sky_radiance(Environment *p_env, const Projec
}
if (update_single_frame) {
- for (int i = 0; i < max_processing_layer; i++) {
+ for (int i = 0; i <= max_processing_layer; i++) {
_filter_sky_radiance(sky, i);
}
} else {
@@ -1044,13 +890,52 @@ void RasterizerSceneGLES3::_update_sky_radiance(Environment *p_env, const Projec
sky->reflection_dirty = false;
} else {
- if (sky_mode == RS::SKY_MODE_INCREMENTAL && sky->processing_layer < max_processing_layer) {
+ if (sky_mode == RS::SKY_MODE_INCREMENTAL && sky->processing_layer <= max_processing_layer) {
_filter_sky_radiance(sky, sky->processing_layer);
sky->processing_layer++;
}
}
}
+// Helper functions for IBL filtering
+
+Vector3 importance_sample_GGX(Vector2 xi, float roughness4) {
+ // Compute distribution direction
+ float phi = 2.0 * Math_PI * xi.x;
+ float cos_theta = sqrt((1.0 - xi.y) / (1.0 + (roughness4 - 1.0) * xi.y));
+ float sin_theta = sqrt(1.0 - cos_theta * cos_theta);
+
+ // Convert to spherical direction
+ Vector3 half_vector;
+ half_vector.x = sin_theta * cos(phi);
+ half_vector.y = sin_theta * sin(phi);
+ half_vector.z = cos_theta;
+
+ return half_vector;
+}
+
+float distribution_GGX(float NdotH, float roughness4) {
+ float NdotH2 = NdotH * NdotH;
+ float denom = (NdotH2 * (roughness4 - 1.0) + 1.0);
+ denom = Math_PI * denom * denom;
+
+ return roughness4 / denom;
+}
+
+float radical_inverse_vdC(uint32_t bits) {
+ bits = (bits << 16) | (bits >> 16);
+ bits = ((bits & 0x55555555) << 1) | ((bits & 0xAAAAAAAA) >> 1);
+ bits = ((bits & 0x33333333) << 2) | ((bits & 0xCCCCCCCC) >> 2);
+ bits = ((bits & 0x0F0F0F0F) << 4) | ((bits & 0xF0F0F0F0) >> 4);
+ bits = ((bits & 0x00FF00FF) << 8) | ((bits & 0xFF00FF00) >> 8);
+
+ return float(bits) * 2.3283064365386963e-10;
+}
+
+Vector2 hammersley(uint32_t i, uint32_t N) {
+ return Vector2(float(i) / float(N), radical_inverse_vdC(i));
+}
+
void RasterizerSceneGLES3::_filter_sky_radiance(Sky *p_sky, int p_base_layer) {
GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton();
@@ -1062,21 +947,60 @@ void RasterizerSceneGLES3::_filter_sky_radiance(Sky *p_sky, int p_base_layer) {
if (p_base_layer == 0) {
glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
+ // Copy over base layer without filtering.
mode = CubemapFilterShaderGLES3::MODE_COPY;
-
- //Copy over base layer
}
- glActiveTexture(GL_TEXTURE1);
- glBindTexture(GL_TEXTURE_2D, sky_globals.radical_inverse_vdc_cache_tex);
int size = p_sky->radiance_size >> p_base_layer;
glViewport(0, 0, size, size);
glBindVertexArray(sky_globals.screen_triangle_array);
material_storage->shaders.cubemap_filter_shader.version_bind_shader(scene_globals.cubemap_filter_shader_version, mode);
- material_storage->shaders.cubemap_filter_shader.version_set_uniform(CubemapFilterShaderGLES3::SAMPLE_COUNT, sky_globals.ggx_samples, scene_globals.cubemap_filter_shader_version, mode);
- material_storage->shaders.cubemap_filter_shader.version_set_uniform(CubemapFilterShaderGLES3::ROUGHNESS, float(p_base_layer) / (p_sky->mipmap_count - 1.0), scene_globals.cubemap_filter_shader_version, mode);
- material_storage->shaders.cubemap_filter_shader.version_set_uniform(CubemapFilterShaderGLES3::FACE_SIZE, float(size), scene_globals.cubemap_filter_shader_version, mode);
+
+ if (p_base_layer > 0) {
+ const uint32_t sample_counts[4] = { 1, sky_globals.ggx_samples / 4, sky_globals.ggx_samples / 2, sky_globals.ggx_samples };
+ uint32_t sample_count = sample_counts[MIN(3, p_base_layer)];
+
+ float roughness = float(p_base_layer) / (p_sky->mipmap_count);
+ float roughness4 = roughness * roughness;
+ roughness4 *= roughness4;
+
+ float solid_angle_texel = 4.0 * Math_PI / float(6 * size * size);
+
+ LocalVector<float> sample_directions;
+ sample_directions.resize(4 * sample_count);
+
+ uint32_t index = 0;
+ float weight = 0.0;
+ for (uint32_t i = 0; i < sample_count; i++) {
+ Vector2 xi = hammersley(i, sample_count);
+ Vector3 dir = importance_sample_GGX(xi, roughness4);
+ Vector3 light_vec = (2.0 * dir.z * dir - Vector3(0.0, 0.0, 1.0));
+
+ if (light_vec.z < 0.0) {
+ continue;
+ }
+
+ sample_directions[index * 4] = light_vec.x;
+ sample_directions[index * 4 + 1] = light_vec.y;
+ sample_directions[index * 4 + 2] = light_vec.z;
+
+ float D = distribution_GGX(dir.z, roughness4);
+ float pdf = D * dir.z / (4.0 * dir.z) + 0.0001;
+
+ float solid_angle_sample = 1.0 / (float(sample_count) * pdf + 0.0001);
+
+ float mip_level = MAX(0.5 * log2(solid_angle_sample / solid_angle_texel) + float(MAX(1, p_base_layer - 3)), 1.0);
+
+ sample_directions[index * 4 + 3] = mip_level;
+ weight += light_vec.z;
+ index++;
+ }
+
+ glUniform4fv(material_storage->shaders.cubemap_filter_shader.version_get_uniform(CubemapFilterShaderGLES3::SAMPLE_DIRECTIONS_MIP, scene_globals.cubemap_filter_shader_version, mode), sample_count, sample_directions.ptr());
+ material_storage->shaders.cubemap_filter_shader.version_set_uniform(CubemapFilterShaderGLES3::WEIGHT, weight, scene_globals.cubemap_filter_shader_version, mode);
+ material_storage->shaders.cubemap_filter_shader.version_set_uniform(CubemapFilterShaderGLES3::SAMPLE_COUNT, index, scene_globals.cubemap_filter_shader_version, mode);
+ }
for (int i = 0; i < 6; i++) {
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, p_sky->radiance, p_base_layer);
@@ -1431,7 +1355,7 @@ bool RasterizerSceneGLES3::voxel_gi_needs_update(RID p_probe) const {
return false;
}
-void RasterizerSceneGLES3::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects) {
+void RasterizerSceneGLES3::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects) {
}
void RasterizerSceneGLES3::voxel_gi_set_quality(RS::VoxelGIQuality) {
@@ -1905,7 +1829,7 @@ void RasterizerSceneGLES3::_setup_lights(const RenderDataGLES3 *p_render_data, b
glBindBuffer(GL_UNIFORM_BUFFER, 0);
}
-void RasterizerSceneGLES3::render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data, RendererScene::RenderInfo *r_render_info) {
+void RasterizerSceneGLES3::render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data, RendererScene::RenderInfo *r_render_info) {
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
GLES3::Config *config = GLES3::Config::get_singleton();
RENDER_TIMESTAMP("Setup 3D Scene");
@@ -2490,10 +2414,10 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
}
}
-void RasterizerSceneGLES3::render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
+void RasterizerSceneGLES3::render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
}
-void RasterizerSceneGLES3::render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<GeometryInstance *> &p_instances) {
+void RasterizerSceneGLES3::render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<RenderGeometryInstance *> &p_instances) {
}
void RasterizerSceneGLES3::set_time(double p_time, double p_step) {
@@ -2749,8 +2673,12 @@ void fragment() {
material_storage->shaders.sky_shader.initialize(global_defines);
sky_globals.shader_default_version = material_storage->shaders.sky_shader.version_create();
material_storage->shaders.sky_shader.version_bind_shader(sky_globals.shader_default_version, SkyShaderGLES3::MODE_BACKGROUND);
+ }
- material_storage->shaders.cubemap_filter_shader.initialize();
+ {
+ String global_defines;
+ global_defines += "\n#define MAX_SAMPLE_COUNT " + itos(sky_globals.ggx_samples) + "\n";
+ material_storage->shaders.cubemap_filter_shader.initialize(global_defines);
scene_globals.cubemap_filter_shader_version = material_storage->shaders.cubemap_filter_shader.version_create();
material_storage->shaders.cubemap_filter_shader.version_bind_shader(scene_globals.cubemap_filter_shader_version, CubemapFilterShaderGLES3::MODE_DEFAULT);
}
@@ -2820,36 +2748,6 @@ void sky() {
glBindBuffer(GL_ARRAY_BUFFER, 0); //unbind
}
- // Radical inverse vdc cache texture used for cubemap filtering.
- {
- glGenTextures(1, &sky_globals.radical_inverse_vdc_cache_tex);
-
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, sky_globals.radical_inverse_vdc_cache_tex);
-
- uint8_t radical_inverse[512];
-
- for (uint32_t i = 0; i < 512; i++) {
- uint32_t bits = i;
-
- bits = (bits << 16) | (bits >> 16);
- bits = ((bits & 0x55555555) << 1) | ((bits & 0xAAAAAAAA) >> 1);
- bits = ((bits & 0x33333333) << 2) | ((bits & 0xCCCCCCCC) >> 2);
- bits = ((bits & 0x0F0F0F0F) << 4) | ((bits & 0xF0F0F0F0) >> 4);
- bits = ((bits & 0x00FF00FF) << 8) | ((bits & 0xFF00FF00) >> 8);
-
- float value = float(bits) * 2.3283064365386963e-10;
- radical_inverse[i] = uint8_t(CLAMP(value * 255.0, 0, 255));
- }
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, 512, 1, 0, GL_RED, GL_UNSIGNED_BYTE, radical_inverse);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); //need this for proper sampling
-
- glBindTexture(GL_TEXTURE_2D, 0);
- }
#ifdef GLES_OVER_GL
glEnable(_EXT_TEXTURE_CUBE_MAP_SEAMLESS);
#endif
diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h
index 3ac8770228..18be216598 100644
--- a/drivers/gles3/rasterizer_scene_gles3.h
+++ b/drivers/gles3/rasterizer_scene_gles3.h
@@ -107,7 +107,7 @@ struct RenderDataGLES3 {
float z_near = 0.0;
float z_far = 0.0;
- const PagedArray<RendererSceneRender::GeometryInstance *> *instances = nullptr;
+ const PagedArray<RenderGeometryInstance *> *instances = nullptr;
const PagedArray<RID> *lights = nullptr;
const PagedArray<RID> *reflection_probes = nullptr;
RID environment = RID();
@@ -210,7 +210,7 @@ private:
mutable RID_Owner<LightInstance> light_instance_owner;
- struct GeometryInstanceGLES3;
+ class GeometryInstanceGLES3;
// Cached data for drawing surfaces
struct GeometryInstanceSurface {
@@ -265,33 +265,16 @@ private:
GeometryInstanceGLES3 *owner = nullptr;
};
- struct GeometryInstanceGLES3 : public GeometryInstance {
+ class GeometryInstanceGLES3 : public RenderGeometryInstanceBase {
+ public:
//used during rendering
- bool mirror = false;
- bool non_uniform_scale = false;
- float lod_bias = 0.0;
- float lod_model_scale = 1.0;
- AABB transformed_aabb; //needed for LOD
- float depth = 0;
- uint32_t flags_cache = 0;
bool store_transform_cache = true;
- int32_t shader_parameters_offset = -1;
- uint32_t layer_mask = 1;
int32_t instance_count = 0;
- RID mesh_instance;
bool can_sdfgi = false;
bool using_projectors = false;
bool using_softshadows = false;
- bool fade_near = false;
- float fade_near_begin = 0;
- float fade_near_end = 0;
- bool fade_far = false;
- float fade_far_begin = 0;
- float fade_far_end = 0;
- float force_alpha = 1.0;
- float parent_fade_alpha = 1.0;
uint32_t omni_light_count = 0;
LocalVector<RID> omni_lights;
@@ -301,35 +284,22 @@ private:
LocalVector<uint32_t> spot_light_gl_cache;
//used during setup
- uint32_t base_flags = 0;
- Transform3D transform;
GeometryInstanceSurface *surface_caches = nullptr;
SelfList<GeometryInstanceGLES3> dirty_list_element;
- struct Data {
- //data used less often goes into regular heap
- RID base;
- RS::InstanceType base_type;
-
- RID skeleton;
- Vector<RID> surface_materials;
- RID material_override;
- RID material_overlay;
- AABB aabb;
-
- bool use_dynamic_gi = false;
- bool use_baked_light = false;
- bool cast_double_sided_shadows = false;
- bool mirror = false;
- bool dirty_dependencies = false;
+ GeometryInstanceGLES3() :
+ dirty_list_element(this) {}
- DependencyTracker dependency_tracker;
- };
+ virtual void _mark_dirty() override;
+ virtual void set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override;
+ virtual void set_lightmap_capture(const Color *p_sh9) override;
- Data *data = nullptr;
+ virtual void pair_light_instances(const RID *p_light_instances, uint32_t p_light_instance_count) override;
+ virtual void pair_reflection_probe_instances(const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override {}
+ virtual void pair_decal_instances(const RID *p_decal_instances, uint32_t p_decal_instance_count) override {}
+ virtual void pair_voxel_gi_instances(const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override {}
- GeometryInstanceGLES3() :
- dirty_list_element(this) {}
+ virtual void set_softshadow_projector_pairing(bool p_softshadow, bool p_projector) override {}
};
enum {
@@ -357,8 +327,7 @@ private:
void _geometry_instance_add_surface_with_material(GeometryInstanceGLES3 *ginstance, uint32_t p_surface, GLES3::SceneMaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh);
void _geometry_instance_add_surface_with_material_chain(GeometryInstanceGLES3 *ginstance, uint32_t p_surface, GLES3::SceneMaterialData *p_material, RID p_mat_src, RID p_mesh);
void _geometry_instance_add_surface(GeometryInstanceGLES3 *ginstance, uint32_t p_surface, RID p_material, RID p_mesh);
- void _geometry_instance_mark_dirty(GeometryInstance *p_geometry_instance);
- void _geometry_instance_update(GeometryInstance *p_geometry_instance);
+ void _geometry_instance_update(RenderGeometryInstance *p_geometry_instance);
void _update_dirty_geometry_instances();
struct SceneState {
@@ -738,35 +707,14 @@ protected:
void _free_sky_data(Sky *p_sky);
public:
+ static RasterizerSceneGLES3 *get_singleton() { return singleton; }
+
RasterizerCanvasGLES3 *canvas;
- GeometryInstance *geometry_instance_create(RID p_base) override;
- void geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) override;
- void geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) override;
- void geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_overlay) override;
- void geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_material) override;
- void geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) override;
- void geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabbb) override;
- void geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) override;
- void geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) override;
- void geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) override;
- void geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) override;
- void geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) override;
- void geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) override;
- void geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) override;
- void geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override;
- void geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) override;
- void geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) override;
- void geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) override;
+ RenderGeometryInstance *geometry_instance_create(RID p_base) override;
+ void geometry_instance_free(RenderGeometryInstance *p_geometry_instance) override;
uint32_t geometry_instance_get_pair_mask() override;
- void geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) override;
- void geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override;
- void geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) override;
- void geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override;
- void geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) override;
-
- void geometry_instance_free(GeometryInstance *p_geometry_instance) override;
/* SHADOW ATLAS API */
@@ -899,13 +847,13 @@ public:
RID voxel_gi_instance_create(RID p_voxel_gi) override;
void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) override;
bool voxel_gi_needs_update(RID p_probe) const override;
- void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects) override;
+ void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects) override;
void voxel_gi_set_quality(RS::VoxelGIQuality) override;
- void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) override;
- void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
- void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<GeometryInstance *> &p_instances) override;
+ void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) override;
+ void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
+ void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<RenderGeometryInstance *> &p_instances) override;
void set_scene_pass(uint64_t p_pass) override {
scene_pass = p_pass;
@@ -940,7 +888,6 @@ public:
void decals_set_filter(RS::DecalFilter p_filter) override;
void light_projectors_set_filter(RS::LightProjectorFilter p_filter) override;
- static RasterizerSceneGLES3 *get_singleton();
RasterizerSceneGLES3();
~RasterizerSceneGLES3();
};
diff --git a/drivers/gles3/shaders/cubemap_filter.glsl b/drivers/gles3/shaders/cubemap_filter.glsl
index ebf0c08ec4..57f0d7d0b8 100644
--- a/drivers/gles3/shaders/cubemap_filter.glsl
+++ b/drivers/gles3/shaders/cubemap_filter.glsl
@@ -29,19 +29,15 @@ uniform samplerCube source_cube; //texunit:0
/* clang-format on */
uniform int face_id;
-uniform float roughness;
-uniform float face_size;
-uniform int sample_count;
-//Todo, profile on low end hardware to see if fixed loop is faster
-#ifdef USE_FIXED_SAMPLES
-#define FIXED_SAMPLE_COUNT 32
+#ifndef MODE_DIRECT_WRITE
+uniform int sample_count;
+uniform vec4 sample_directions_mip[MAX_SAMPLE_COUNT];
+uniform float weight;
#endif
in highp vec2 uv_interp;
-uniform sampler2D radical_inverse_vdc_cache; // texunit:1
-
layout(location = 0) out vec4 frag_color;
#define M_PI 3.14159265359
@@ -93,48 +89,6 @@ vec3 texelCoordToVec(vec2 uv, int faceID) {
return normalize(result);
}
-vec3 ImportanceSampleGGX(vec2 xi, float roughness4) {
- // Compute distribution direction
- float Phi = 2.0 * M_PI * xi.x;
- float CosTheta = sqrt((1.0 - xi.y) / (1.0 + (roughness4 - 1.0) * xi.y));
- float SinTheta = sqrt(1.0 - CosTheta * CosTheta);
-
- // Convert to spherical direction
- vec3 H;
- H.x = SinTheta * cos(Phi);
- H.y = SinTheta * sin(Phi);
- H.z = CosTheta;
-
- return H;
-}
-
-float DistributionGGX(float NdotH, float roughness4) {
- float NdotH2 = NdotH * NdotH;
- float denom = (NdotH2 * (roughness4 - 1.0) + 1.0);
- denom = M_PI * denom * denom;
-
- return roughness4 / denom;
-}
-
-// https://graphicrants.blogspot.com.au/2013/08/specular-brdf-reference.html
-float GGX(float NdotV, float a) {
- float k = a / 2.0;
- return NdotV / (NdotV * (1.0 - k) + k);
-}
-
-// https://graphicrants.blogspot.com.au/2013/08/specular-brdf-reference.html
-float G_Smith(float a, float nDotV, float nDotL) {
- return GGX(nDotL, a * a) * GGX(nDotV, a * a);
-}
-
-float radical_inverse_VdC(int i) {
- return texture(radical_inverse_vdc_cache, vec2(float(i) / 512.0, 0.0)).x;
-}
-
-vec2 Hammersley(int i, int N) {
- return vec2(float(i) / float(N), radical_inverse_VdC(i));
-}
-
void main() {
vec3 color = vec3(0.0);
vec2 uv = uv_interp;
@@ -145,9 +99,6 @@ void main() {
#else
vec4 sum = vec4(0.0);
- float solid_angle_texel = 4.0 * M_PI / (6.0 * face_size * face_size);
- float roughness2 = roughness * roughness;
- float roughness4 = roughness2 * roughness2;
vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
mat3 T;
T[0] = normalize(cross(UpVector, N));
@@ -155,32 +106,15 @@ void main() {
T[2] = N;
for (int sample_num = 0; sample_num < sample_count; sample_num++) {
- vec2 xi = Hammersley(sample_num, sample_count);
-
- vec3 H = T * ImportanceSampleGGX(xi, roughness4);
- float NdotH = dot(N, H);
- vec3 L = (2.0 * NdotH * H - N);
-
- float NdotL = clamp(dot(N, L), 0.0, 1.0);
-
- if (NdotL > 0.0) {
- float D = DistributionGGX(NdotH, roughness4);
- float pdf = D * NdotH / (4.0 * NdotH) + 0.0001;
-
- float solid_angle_sample = 1.0 / (float(sample_count) * pdf + 0.0001);
-
- float mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(solid_angle_sample / solid_angle_texel);
-
- vec3 val = textureLod(source_cube, L, mipLevel).rgb;
- // Mix using linear
- val = srgb_to_linear(val);
-
- sum.rgb += val * NdotL;
- sum.a += NdotL;
- }
+ vec4 sample = sample_directions_mip[sample_num];
+ vec3 L = T * sample.xyz;
+ vec3 val = textureLod(source_cube, L, sample.w).rgb;
+ // Mix using linear
+ val = srgb_to_linear(val);
+ sum.rgb += val * sample.z;
}
- sum /= sum.a;
+ sum /= weight;
sum.rgb = linear_to_srgb(sum.rgb);
frag_color = vec4(sum.rgb, 1.0);
diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp
index 11359c4e62..4cd8dd0b14 100644
--- a/drivers/gles3/storage/material_storage.cpp
+++ b/drivers/gles3/storage/material_storage.cpp
@@ -1518,7 +1518,7 @@ MaterialStorage::MaterialStorage() {
actions.renames["NORMAL_ROUGHNESS_TEXTURE"] = "normal_roughness_buffer";
actions.renames["DEPTH"] = "gl_FragDepth";
actions.renames["OUTPUT_IS_SRGB"] = "true";
- actions.renames["FOG"] = "custom_fog";
+ actions.renames["FOG"] = "fog";
actions.renames["RADIANCE"] = "custom_radiance";
actions.renames["IRRADIANCE"] = "custom_irradiance";
actions.renames["BONE_INDICES"] = "bone_attrib";
@@ -2900,7 +2900,22 @@ void CanvasShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
@@ -3123,7 +3138,22 @@ void SkyShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
@@ -3433,7 +3463,22 @@ void SceneShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp
index 9abd4780eb..5f9eefe7fa 100644
--- a/drivers/vulkan/rendering_device_vulkan.cpp
+++ b/drivers/vulkan/rendering_device_vulkan.cpp
@@ -1834,6 +1834,10 @@ RID RenderingDeviceVulkan::texture_create(const TextureFormat &p_format, const T
if (p_format.usage_bits & TEXTURE_USAGE_STORAGE_ATOMIC_BIT && !(flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)) {
ERR_FAIL_V_MSG(RID(), "Format " + format_text + " does not support usage as atomic storage image.");
}
+
+ if (p_format.usage_bits & TEXTURE_USAGE_VRS_ATTACHMENT_BIT && !(flags & VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR)) {
+ ERR_FAIL_V_MSG(RID(), "Format " + format_text + " does not support usage as VRS attachment.");
+ }
}
//some view validation
@@ -3354,6 +3358,10 @@ bool RenderingDeviceVulkan::texture_is_format_supported_for_usage(DataFormat p_f
return false;
}
+ if (p_usage & TEXTURE_USAGE_VRS_ATTACHMENT_BIT && !(flags & VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR)) {
+ return false;
+ }
+
return true;
}
@@ -3807,7 +3815,12 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF
subpass.pNext = subpass_nextptr;
subpass.flags = 0;
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
- subpass.viewMask = view_mask;
+ if (p_view_count == 1) {
+ // VUID-VkSubpassDescription2-multiview-06558: If the multiview feature is not enabled, viewMask must be 0.
+ subpass.viewMask = 0;
+ } else {
+ subpass.viewMask = view_mask;
+ }
subpass.inputAttachmentCount = input_references.size();
if (input_references.size()) {
subpass.pInputAttachments = input_references.ptr();
@@ -3895,8 +3908,14 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF
render_pass_create_info.pDependencies = nullptr;
}
- render_pass_create_info.correlatedViewMaskCount = 1;
- render_pass_create_info.pCorrelatedViewMasks = &correlation_mask;
+ if (p_view_count == 1) {
+ // VUID-VkRenderPassCreateInfo2-viewMask-03057: If the VkSubpassDescription2::viewMask member of all elements of pSubpasses is 0, correlatedViewMaskCount must be 0.
+ render_pass_create_info.correlatedViewMaskCount = 0;
+ render_pass_create_info.pCorrelatedViewMasks = nullptr;
+ } else {
+ render_pass_create_info.correlatedViewMaskCount = 1;
+ render_pass_create_info.pCorrelatedViewMasks = &correlation_mask;
+ }
Vector<uint32_t> view_masks;
VkRenderPassMultiviewCreateInfo render_pass_multiview_create_info;
@@ -3997,6 +4016,7 @@ RenderingDevice::FramebufferFormatID RenderingDeviceVulkan::framebuffer_format_c
subpass.pNext = nullptr;
subpass.flags = 0;
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
+ subpass.viewMask = 0;
subpass.inputAttachmentCount = 0; //unsupported for now
subpass.pInputAttachments = nullptr;
subpass.colorAttachmentCount = 0;
diff --git a/drivers/vulkan/vulkan_context.cpp b/drivers/vulkan/vulkan_context.cpp
index 524693eb03..8a320c0f36 100644
--- a/drivers/vulkan/vulkan_context.cpp
+++ b/drivers/vulkan/vulkan_context.cpp
@@ -1827,7 +1827,7 @@ Error VulkanContext::_update_swap_chain(Window *window) {
/*pNext*/ nullptr,
/*flags*/ 0,
/*pipelineBindPoint*/ VK_PIPELINE_BIND_POINT_GRAPHICS,
- /*viewMask*/ 1,
+ /*viewMask*/ 0,
/*inputAttachmentCount*/ 0,
/*pInputAttachments*/ nullptr,
/*colorAttachmentCount*/ 1,
@@ -1838,7 +1838,6 @@ Error VulkanContext::_update_swap_chain(Window *window) {
/*pPreserveAttachments*/ nullptr,
};
- uint32_t view_masks = 1;
const VkRenderPassCreateInfo2KHR rp_info = {
/*sType*/ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR,
/*pNext*/ nullptr,
@@ -1849,8 +1848,8 @@ Error VulkanContext::_update_swap_chain(Window *window) {
/*pSubpasses*/ &subpass,
/*dependencyCount*/ 0,
/*pDependencies*/ nullptr,
- /*correlatedViewMaskCount*/ 1,
- /*pCorrelatedViewMasks*/ &view_masks,
+ /*correlatedViewMaskCount*/ 0,
+ /*pCorrelatedViewMasks*/ nullptr,
};
err = vkCreateRenderPass2KHR(device, &rp_info, nullptr, &window->render_pass);
diff --git a/drivers/vulkan/vulkan_context.h b/drivers/vulkan/vulkan_context.h
index cc9c984ead..35e7ce7db8 100644
--- a/drivers/vulkan/vulkan_context.h
+++ b/drivers/vulkan/vulkan_context.h
@@ -272,11 +272,11 @@ public:
uint32_t get_vulkan_major() const { return vulkan_major; };
uint32_t get_vulkan_minor() const { return vulkan_minor; };
- SubgroupCapabilities get_subgroup_capabilities() const { return subgroup_capabilities; };
- MultiviewCapabilities get_multiview_capabilities() const { return multiview_capabilities; };
- VRSCapabilities get_vrs_capabilities() const { return vrs_capabilities; };
- ShaderCapabilities get_shader_capabilities() const { return shader_capabilities; };
- StorageBufferCapabilities get_storage_buffer_capabilities() const { return storage_buffer_capabilities; };
+ const SubgroupCapabilities &get_subgroup_capabilities() const { return subgroup_capabilities; };
+ const MultiviewCapabilities &get_multiview_capabilities() const { return multiview_capabilities; };
+ const VRSCapabilities &get_vrs_capabilities() const { return vrs_capabilities; };
+ const ShaderCapabilities &get_shader_capabilities() const { return shader_capabilities; };
+ const StorageBufferCapabilities &get_storage_buffer_capabilities() const { return storage_buffer_capabilities; };
VkDevice get_device();
VkPhysicalDevice get_physical_device();
diff --git a/editor/SCsub b/editor/SCsub
index a596c7d364..c217f162b4 100644
--- a/editor/SCsub
+++ b/editor/SCsub
@@ -76,7 +76,7 @@ if env["tools"]:
# Editor translations
to_include = (
- "ar,bg,ca,cs,de,el,eo,es_AR,es,fi,fr,gl,he,hu,id,it,ja,ko,lv,ms,nb,nl,pl,pt_BR,pt,ro,ru,sk,th,tr,uk,vi,zh_CN,zh_TW"
+ "ar,bg,ca,cs,de,el,eo,es_AR,es,fi,fr,gl,he,hu,id,it,ja,ko,lv,ms,nb,nl,pl,pt_BR,pt,ro,ru,sk,sv,th,tr,uk,vi,zh_CN,zh_TW"
).split(",")
tlist = [env.Dir("#editor/translations").abspath + "/" + f + ".po" for f in to_include]
env.Depends("#editor/editor_translations.gen.h", tlist)
@@ -113,6 +113,7 @@ if env["tools"]:
env.add_source_files(env.editor_sources, "register_exporters.gen.cpp")
SConscript("debugger/SCsub")
+ SConscript("export/SCsub")
SConscript("fileserver/SCsub")
SConscript("icons/SCsub")
SConscript("import/SCsub")
diff --git a/editor/debugger/debug_adapter/debug_adapter_parser.cpp b/editor/debugger/debug_adapter/debug_adapter_parser.cpp
index 0caeb90108..3c3e4faa6f 100644
--- a/editor/debugger/debug_adapter/debug_adapter_parser.cpp
+++ b/editor/debugger/debug_adapter/debug_adapter_parser.cpp
@@ -34,6 +34,7 @@
#include "editor/debugger/script_editor_debugger.h"
#include "editor/editor_node.h"
#include "editor/editor_run_native.h"
+#include "editor/export/editor_export_platform.h"
#include "editor/plugins/script_editor_plugin.h"
void DebugAdapterParser::_bind_methods() {
diff --git a/editor/editor_export.h b/editor/editor_export.h
deleted file mode 100644
index a632cd88cd..0000000000
--- a/editor/editor_export.h
+++ /dev/null
@@ -1,532 +0,0 @@
-/*************************************************************************/
-/* editor_export.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* https://godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#ifndef EDITOR_EXPORT_H
-#define EDITOR_EXPORT_H
-
-#include "core/io/dir_access.h"
-#include "core/io/resource.h"
-#include "scene/gui/rich_text_label.h"
-#include "scene/main/node.h"
-#include "scene/main/timer.h"
-#include "scene/resources/texture.h"
-
-class FileAccess;
-class EditorExportPlatform;
-class EditorFileSystemDirectory;
-struct EditorProgress;
-
-class EditorExportPreset : public RefCounted {
- GDCLASS(EditorExportPreset, RefCounted);
-
-public:
- enum ExportFilter {
- EXPORT_ALL_RESOURCES,
- EXPORT_SELECTED_SCENES,
- EXPORT_SELECTED_RESOURCES,
- EXCLUDE_SELECTED_RESOURCES,
- };
-
- enum ScriptExportMode {
- MODE_SCRIPT_TEXT,
- MODE_SCRIPT_COMPILED,
- };
-
-private:
- Ref<EditorExportPlatform> platform;
- ExportFilter export_filter = EXPORT_ALL_RESOURCES;
- String include_filter;
- String exclude_filter;
- String export_path;
-
- String exporter;
- HashSet<String> selected_files;
- bool runnable = false;
-
- friend class EditorExport;
- friend class EditorExportPlatform;
-
- List<PropertyInfo> properties;
- HashMap<StringName, Variant> values;
-
- String name;
-
- String custom_features;
-
- String enc_in_filters;
- String enc_ex_filters;
- bool enc_pck = false;
- bool enc_directory = false;
-
- int script_mode = MODE_SCRIPT_COMPILED;
- String script_key;
-
-protected:
- bool _set(const StringName &p_name, const Variant &p_value);
- bool _get(const StringName &p_name, Variant &r_ret) const;
- void _get_property_list(List<PropertyInfo> *p_list) const;
-
-public:
- Ref<EditorExportPlatform> get_platform() const;
-
- bool has(const StringName &p_property) const { return values.has(p_property); }
-
- void update_files_to_export();
-
- Vector<String> get_files_to_export() const;
-
- void add_export_file(const String &p_path);
- void remove_export_file(const String &p_path);
- bool has_export_file(const String &p_path);
-
- void set_name(const String &p_name);
- String get_name() const;
-
- void set_runnable(bool p_enable);
- bool is_runnable() const;
-
- void set_export_filter(ExportFilter p_filter);
- ExportFilter get_export_filter() const;
-
- void set_include_filter(const String &p_include);
- String get_include_filter() const;
-
- void set_exclude_filter(const String &p_exclude);
- String get_exclude_filter() const;
-
- void set_custom_features(const String &p_custom_features);
- String get_custom_features() const;
-
- void set_export_path(const String &p_path);
- String get_export_path() const;
-
- void set_enc_in_filter(const String &p_filter);
- String get_enc_in_filter() const;
-
- void set_enc_ex_filter(const String &p_filter);
- String get_enc_ex_filter() const;
-
- void set_enc_pck(bool p_enabled);
- bool get_enc_pck() const;
-
- void set_enc_directory(bool p_enabled);
- bool get_enc_directory() const;
-
- void set_script_export_mode(int p_mode);
- int get_script_export_mode() const;
-
- void set_script_encryption_key(const String &p_key);
- String get_script_encryption_key() const;
-
- const List<PropertyInfo> &get_properties() const { return properties; }
-
- EditorExportPreset() {}
-};
-
-struct SharedObject {
- String path;
- Vector<String> tags;
- String target;
-
- SharedObject(const String &p_path, const Vector<String> &p_tags, const String &p_target) :
- path(p_path),
- tags(p_tags),
- target(p_target) {
- }
-
- SharedObject() {}
-};
-
-class EditorExportPlatform : public RefCounted {
- GDCLASS(EditorExportPlatform, RefCounted);
-
-public:
- typedef Error (*EditorExportSaveFunction)(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total, const Vector<String> &p_enc_in_filters, const Vector<String> &p_enc_ex_filters, const Vector<uint8_t> &p_key);
- typedef Error (*EditorExportSaveSharedObject)(void *p_userdata, const SharedObject &p_so);
-
- enum ExportMessageType {
- EXPORT_MESSAGE_NONE,
- EXPORT_MESSAGE_INFO,
- EXPORT_MESSAGE_WARNING,
- EXPORT_MESSAGE_ERROR,
- };
-
- struct ExportMessage {
- ExportMessageType msg_type;
- String category;
- String text;
- };
-
-private:
- struct SavedData {
- uint64_t ofs = 0;
- uint64_t size = 0;
- bool encrypted = false;
- Vector<uint8_t> md5;
- CharString path_utf8;
-
- bool operator<(const SavedData &p_data) const {
- return path_utf8 < p_data.path_utf8;
- }
- };
-
- struct PackData {
- Ref<FileAccess> f;
- Vector<SavedData> file_ofs;
- EditorProgress *ep = nullptr;
- Vector<SharedObject> *so_files = nullptr;
- };
-
- struct ZipData {
- void *zip = nullptr;
- EditorProgress *ep = nullptr;
- };
-
- struct FeatureContainers {
- HashSet<String> features;
- Vector<String> features_pv;
- };
-
- Vector<ExportMessage> messages;
-
- void _export_find_resources(EditorFileSystemDirectory *p_dir, HashSet<String> &p_paths);
- void _export_find_dependencies(const String &p_path, HashSet<String> &p_paths);
-
- void gen_debug_flags(Vector<String> &r_flags, int p_flags);
- static Error _save_pack_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total, const Vector<String> &p_enc_in_filters, const Vector<String> &p_enc_ex_filters, const Vector<uint8_t> &p_key);
- static Error _save_zip_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total, const Vector<String> &p_enc_in_filters, const Vector<String> &p_enc_ex_filters, const Vector<uint8_t> &p_key);
-
- void _edit_files_with_filter(Ref<DirAccess> &da, const Vector<String> &p_filters, HashSet<String> &r_list, bool exclude);
- void _edit_filter_list(HashSet<String> &r_list, const String &p_filter, bool exclude);
-
- static Error _add_shared_object(void *p_userdata, const SharedObject &p_so);
-
-protected:
- struct ExportNotifier {
- ExportNotifier(EditorExportPlatform &p_platform, const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags);
- ~ExportNotifier();
- };
-
- FeatureContainers get_feature_containers(const Ref<EditorExportPreset> &p_preset, bool p_debug);
-
- bool exists_export_template(String template_file_name, String *err) const;
- String find_export_template(String template_file_name, String *err = nullptr) const;
- void gen_export_flags(Vector<String> &r_flags, int p_flags);
-
-public:
- virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) = 0;
-
- struct ExportOption {
- PropertyInfo option;
- Variant default_value;
-
- ExportOption(const PropertyInfo &p_info, const Variant &p_default) :
- option(p_info),
- default_value(p_default) {
- }
- ExportOption() {}
- };
-
- virtual Ref<EditorExportPreset> create_preset();
-
- virtual void clear_messages() { messages.clear(); }
- virtual void add_message(ExportMessageType p_type, const String &p_category, const String &p_message) {
- ExportMessage msg;
- msg.category = p_category;
- msg.text = p_message;
- msg.msg_type = p_type;
- messages.push_back(msg);
- switch (p_type) {
- case EXPORT_MESSAGE_INFO: {
- print_line(vformat("%s: %s\n", msg.category, msg.text));
- } break;
- case EXPORT_MESSAGE_WARNING: {
- WARN_PRINT(vformat("%s: %s\n", msg.category, msg.text));
- } break;
- case EXPORT_MESSAGE_ERROR: {
- ERR_PRINT(vformat("%s: %s\n", msg.category, msg.text));
- } break;
- default:
- break;
- }
- }
-
- virtual int get_message_count() const {
- return messages.size();
- }
-
- virtual ExportMessage get_message(int p_index) const {
- ERR_FAIL_INDEX_V(p_index, messages.size(), ExportMessage());
- return messages[p_index];
- }
-
- virtual ExportMessageType get_worst_message_type() const {
- ExportMessageType worst_type = EXPORT_MESSAGE_NONE;
- for (int i = 0; i < messages.size(); i++) {
- worst_type = MAX(worst_type, messages[i].msg_type);
- }
- return worst_type;
- }
-
- virtual bool fill_log_messages(RichTextLabel *p_log, Error p_err);
-
- virtual void get_export_options(List<ExportOption> *r_options) = 0;
- virtual bool should_update_export_options() { return false; }
- virtual bool get_export_option_visibility(const String &p_option, const HashMap<StringName, Variant> &p_options) const { return true; }
-
- virtual String get_os_name() const = 0;
- virtual String get_name() const = 0;
- virtual Ref<Texture2D> get_logo() const = 0;
-
- Error export_project_files(const Ref<EditorExportPreset> &p_preset, bool p_debug, EditorExportSaveFunction p_func, void *p_udata, EditorExportSaveSharedObject p_so_func = nullptr);
-
- Error save_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, Vector<SharedObject> *p_so_files = nullptr, bool p_embed = false, int64_t *r_embedded_start = nullptr, int64_t *r_embedded_size = nullptr);
- Error save_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path);
-
- virtual bool poll_export() { return false; }
- virtual int get_options_count() const { return 0; }
- virtual String get_options_tooltip() const { return ""; }
- virtual Ref<ImageTexture> get_option_icon(int p_index) const;
- virtual String get_option_label(int p_device) const { return ""; }
- virtual String get_option_tooltip(int p_device) const { return ""; }
-
- enum DebugFlags {
- DEBUG_FLAG_DUMB_CLIENT = 1,
- DEBUG_FLAG_REMOTE_DEBUG = 2,
- DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST = 4,
- DEBUG_FLAG_VIEW_COLLISONS = 8,
- DEBUG_FLAG_VIEW_NAVIGATION = 16,
- };
-
- virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) { return OK; }
- virtual Ref<Texture2D> get_run_icon() const { return get_logo(); }
-
- String test_etc2() const;
- virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const = 0;
-
- virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const = 0;
- virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) = 0;
- virtual Error export_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0);
- virtual Error export_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0);
- virtual void get_platform_features(List<String> *r_features) = 0;
- virtual void resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, HashSet<String> &p_features) = 0;
- virtual String get_debug_protocol() const { return "tcp://"; }
-
- EditorExportPlatform();
-};
-
-class EditorExportPlugin : public RefCounted {
- GDCLASS(EditorExportPlugin, RefCounted);
-
- friend class EditorExportPlatform;
-
- Ref<EditorExportPreset> export_preset;
-
- Vector<SharedObject> shared_objects;
- struct ExtraFile {
- String path;
- Vector<uint8_t> data;
- bool remap = false;
- };
- Vector<ExtraFile> extra_files;
- bool skipped = false;
-
- Vector<String> ios_frameworks;
- Vector<String> ios_embedded_frameworks;
- Vector<String> ios_project_static_libs;
- String ios_plist_content;
- String ios_linker_flags;
- Vector<String> ios_bundle_files;
- String ios_cpp_code;
-
- Vector<String> macos_plugin_files;
-
- _FORCE_INLINE_ void _clear() {
- shared_objects.clear();
- extra_files.clear();
- skipped = false;
- }
-
- _FORCE_INLINE_ void _export_end() {
- ios_frameworks.clear();
- ios_embedded_frameworks.clear();
- ios_bundle_files.clear();
- ios_plist_content = "";
- ios_linker_flags = "";
- ios_cpp_code = "";
- macos_plugin_files.clear();
- }
-
- void _export_file_script(const String &p_path, const String &p_type, const Vector<String> &p_features);
- void _export_begin_script(const Vector<String> &p_features, bool p_debug, const String &p_path, int p_flags);
- void _export_end_script();
-
-protected:
- void set_export_preset(const Ref<EditorExportPreset> &p_preset);
- Ref<EditorExportPreset> get_export_preset() const;
-
- void add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap);
- void add_shared_object(const String &p_path, const Vector<String> &tags, const String &p_target = String());
-
- void add_ios_framework(const String &p_path);
- void add_ios_embedded_framework(const String &p_path);
- void add_ios_project_static_lib(const String &p_path);
- void add_ios_plist_content(const String &p_plist_content);
- void add_ios_linker_flags(const String &p_flags);
- void add_ios_bundle_file(const String &p_path);
- void add_ios_cpp_code(const String &p_code);
- void add_macos_plugin_file(const String &p_path);
-
- void skip();
-
- virtual void _export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features);
- virtual void _export_begin(const HashSet<String> &p_features, bool p_debug, const String &p_path, int p_flags);
-
- static void _bind_methods();
-
- GDVIRTUAL3(_export_file, String, String, Vector<String>)
- GDVIRTUAL4(_export_begin, Vector<String>, bool, String, uint32_t)
- GDVIRTUAL0(_export_end)
-
-public:
- Vector<String> get_ios_frameworks() const;
- Vector<String> get_ios_embedded_frameworks() const;
- Vector<String> get_ios_project_static_libs() const;
- String get_ios_plist_content() const;
- String get_ios_linker_flags() const;
- Vector<String> get_ios_bundle_files() const;
- String get_ios_cpp_code() const;
- const Vector<String> &get_macos_plugin_files() const;
-
- EditorExportPlugin();
-};
-
-class EditorExport : public Node {
- GDCLASS(EditorExport, Node);
-
- Vector<Ref<EditorExportPlatform>> export_platforms;
- Vector<Ref<EditorExportPreset>> export_presets;
- Vector<Ref<EditorExportPlugin>> export_plugins;
-
- StringName _export_presets_updated;
-
- Timer *save_timer = nullptr;
- bool block_save = false;
-
- static EditorExport *singleton;
-
- void _save();
-
-protected:
- friend class EditorExportPreset;
- void save_presets();
-
- void _notification(int p_what);
- static void _bind_methods();
-
-public:
- static EditorExport *get_singleton() { return singleton; }
-
- void add_export_platform(const Ref<EditorExportPlatform> &p_platform);
- int get_export_platform_count();
- Ref<EditorExportPlatform> get_export_platform(int p_idx);
-
- void add_export_preset(const Ref<EditorExportPreset> &p_preset, int p_at_pos = -1);
- int get_export_preset_count() const;
- Ref<EditorExportPreset> get_export_preset(int p_idx);
- void remove_export_preset(int p_idx);
-
- void add_export_plugin(const Ref<EditorExportPlugin> &p_plugin);
- void remove_export_plugin(const Ref<EditorExportPlugin> &p_plugin);
- Vector<Ref<EditorExportPlugin>> get_export_plugins();
-
- void load_config();
- void update_export_presets();
- bool poll_export_platforms();
-
- EditorExport();
- ~EditorExport();
-};
-
-class EditorExportPlatformPC : public EditorExportPlatform {
- GDCLASS(EditorExportPlatformPC, EditorExportPlatform);
-
-private:
- Ref<ImageTexture> logo;
- String name;
- String os_name;
-
- int chmod_flags = -1;
-
-public:
- virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) override;
-
- virtual void get_export_options(List<ExportOption> *r_options) override;
-
- virtual String get_name() const override;
- virtual String get_os_name() const override;
- virtual Ref<Texture2D> get_logo() const override;
-
- virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const override;
- virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) override;
- virtual Error sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path);
- virtual String get_template_file_name(const String &p_target, const String &p_arch) const = 0;
-
- virtual Error prepare_template(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags);
- virtual Error modify_template(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { return OK; };
- virtual Error export_project_data(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags);
-
- void set_extension(const String &p_extension, const String &p_feature_key = "default");
- void set_name(const String &p_name);
- void set_os_name(const String &p_name);
-
- void set_logo(const Ref<Texture2D> &p_logo);
-
- void add_platform_feature(const String &p_feature);
- virtual void get_platform_features(List<String> *r_features) override;
- virtual void resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, HashSet<String> &p_features) override;
-
- int get_chmod_flags() const;
- void set_chmod_flags(int p_flags);
-
- virtual Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) {
- return Error::OK;
- }
-};
-
-class EditorExportTextSceneToBinaryPlugin : public EditorExportPlugin {
- GDCLASS(EditorExportTextSceneToBinaryPlugin, EditorExportPlugin);
-
-public:
- virtual void _export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features) override;
- EditorExportTextSceneToBinaryPlugin();
-};
-
-#endif // EDITOR_EXPORT_H
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 33309d6b97..37329c92f3 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -78,7 +78,6 @@
#include "editor/editor_build_profile.h"
#include "editor/editor_command_palette.h"
#include "editor/editor_data.h"
-#include "editor/editor_export.h"
#include "editor/editor_feature_profile.h"
#include "editor/editor_file_dialog.h"
#include "editor/editor_file_system.h"
@@ -104,7 +103,9 @@
#include "editor/editor_themes.h"
#include "editor/editor_toaster.h"
#include "editor/editor_translation_parser.h"
-#include "editor/export_template_manager.h"
+#include "editor/export/editor_export.h"
+#include "editor/export/export_template_manager.h"
+#include "editor/export/project_export.h"
#include "editor/filesystem_dock.h"
#include "editor/import/audio_stream_import_settings.h"
#include "editor/import/dynamic_font_import_settings.h"
@@ -199,7 +200,6 @@
#include "editor/plugins/visual_shader_editor_plugin.h"
#include "editor/plugins/voxel_gi_editor_plugin.h"
#include "editor/progress_dialog.h"
-#include "editor/project_export.h"
#include "editor/project_settings_editor.h"
#include "editor/register_exporters.h"
#include "editor/scene_tree_dock.h"
@@ -1800,9 +1800,16 @@ void EditorNode::restart_editor() {
_exit_editor(EXIT_SUCCESS);
List<String> args;
+
args.push_back("--path");
args.push_back(ProjectSettings::get_singleton()->get_resource_path());
+
args.push_back("-e");
+
+ if (OS::get_singleton()->is_disable_crash_handler()) {
+ args.push_back("--disable-crash-handler");
+ }
+
if (!to_reopen.is_empty()) {
args.push_back(to_reopen);
}
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 53c2312022..c521c0fb04 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -32,10 +32,10 @@
#define EDITOR_NODE_H
#include "core/templates/safe_refcount.h"
-#include "editor/editor_export.h"
#include "editor/editor_folding.h"
#include "editor/editor_native_shader_source_visualizer.h"
#include "editor/editor_run.h"
+#include "editor/export/editor_export.h"
#include "editor/inspector_dock.h"
#include "editor/property_editor.h"
diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp
index d9c2a42114..566c22f5a9 100644
--- a/editor/editor_plugin.cpp
+++ b/editor/editor_plugin.cpp
@@ -31,11 +31,11 @@
#include "editor_plugin.h"
#include "editor/editor_command_palette.h"
-#include "editor/editor_export.h"
#include "editor/editor_node.h"
#include "editor/editor_paths.h"
#include "editor/editor_resource_preview.h"
#include "editor/editor_settings.h"
+#include "editor/export/editor_export.h"
#include "editor/filesystem_dock.h"
#include "editor/plugins/canvas_item_editor_plugin.h"
#include "editor/plugins/node_3d_editor_plugin.h"
diff --git a/editor/editor_properties_array_dict.h b/editor/editor_properties_array_dict.h
index 44623149d0..82aeebe14a 100644
--- a/editor/editor_properties_array_dict.h
+++ b/editor/editor_properties_array_dict.h
@@ -81,10 +81,7 @@ class EditorPropertyArray : public EditorProperty {
GDCLASS(EditorPropertyArray, EditorProperty);
PopupMenu *change_type = nullptr;
- bool updating = false;
- bool dropping = false;
- Ref<EditorPropertyArrayObject> object;
int page_length = 20;
int page_index = 0;
int changing_type_index;
@@ -106,29 +103,35 @@ class EditorPropertyArray : public EditorProperty {
Button *reorder_selected_button = nullptr;
void _page_changed(int p_page);
- void _length_changed(double p_page);
- void _add_element();
- void _edit_pressed();
- void _property_changed(const String &p_property, Variant p_value, const String &p_name = "", bool p_changing = false);
- void _change_type(Object *p_button, int p_index);
- void _change_type_menu(int p_index);
-
- void _object_id_selected(const StringName &p_property, ObjectID p_id);
- void _remove_pressed(int p_index);
-
- void _button_draw();
- bool _is_drop_valid(const Dictionary &p_drag_data) const;
- bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
- void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
void _reorder_button_gui_input(const Ref<InputEvent> &p_event);
void _reorder_button_down(int p_index);
void _reorder_button_up();
protected:
+ Ref<EditorPropertyArrayObject> object;
+
+ bool updating = false;
+ bool dropping = false;
+
static void _bind_methods();
void _notification(int p_what);
+ virtual void _add_element();
+ virtual void _length_changed(double p_page);
+ virtual void _edit_pressed();
+ virtual void _property_changed(const String &p_property, Variant p_value, const String &p_name = "", bool p_changing = false);
+ virtual void _change_type(Object *p_button, int p_index);
+ virtual void _change_type_menu(int p_index);
+
+ virtual void _object_id_selected(const StringName &p_property, ObjectID p_id);
+ virtual void _remove_pressed(int p_index);
+
+ virtual void _button_draw();
+ virtual bool _is_drop_valid(const Dictionary &p_drag_data) const;
+ virtual bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
+ virtual void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
+
public:
void setup(Variant::Type p_array_type, const String &p_hint_string = "");
virtual void update_property() override;
diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp
index 854885c707..efd6c67d7a 100644
--- a/editor/editor_run_native.cpp
+++ b/editor/editor_run_native.cpp
@@ -30,9 +30,9 @@
#include "editor_run_native.h"
-#include "editor/editor_export.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
+#include "editor/export/editor_export_platform.h"
void EditorRunNative::_notification(int p_what) {
switch (p_what) {
diff --git a/editor/export/SCsub b/editor/export/SCsub
new file mode 100644
index 0000000000..359d04e5df
--- /dev/null
+++ b/editor/export/SCsub
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+Import("env")
+
+env.add_source_files(env.editor_sources, "*.cpp")
diff --git a/editor/export/editor_export.cpp b/editor/export/editor_export.cpp
new file mode 100644
index 0000000000..31f408eedb
--- /dev/null
+++ b/editor/export/editor_export.cpp
@@ -0,0 +1,355 @@
+/*************************************************************************/
+/* editor_export.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "editor_export.h"
+
+#include "core/config/project_settings.h"
+#include "core/io/config_file.h"
+
+EditorExport *EditorExport::singleton = nullptr;
+
+void EditorExport::_save() {
+ Ref<ConfigFile> config;
+ config.instantiate();
+ for (int i = 0; i < export_presets.size(); i++) {
+ Ref<EditorExportPreset> preset = export_presets[i];
+ String section = "preset." + itos(i);
+
+ config->set_value(section, "name", preset->get_name());
+ config->set_value(section, "platform", preset->get_platform()->get_name());
+ config->set_value(section, "runnable", preset->is_runnable());
+ config->set_value(section, "custom_features", preset->get_custom_features());
+
+ bool save_files = false;
+ switch (preset->get_export_filter()) {
+ case EditorExportPreset::EXPORT_ALL_RESOURCES: {
+ config->set_value(section, "export_filter", "all_resources");
+ } break;
+ case EditorExportPreset::EXPORT_SELECTED_SCENES: {
+ config->set_value(section, "export_filter", "scenes");
+ save_files = true;
+ } break;
+ case EditorExportPreset::EXPORT_SELECTED_RESOURCES: {
+ config->set_value(section, "export_filter", "resources");
+ save_files = true;
+ } break;
+ case EditorExportPreset::EXCLUDE_SELECTED_RESOURCES: {
+ config->set_value(section, "export_filter", "exclude");
+ save_files = true;
+ } break;
+ }
+
+ if (save_files) {
+ Vector<String> export_files = preset->get_files_to_export();
+ config->set_value(section, "export_files", export_files);
+ }
+ config->set_value(section, "include_filter", preset->get_include_filter());
+ config->set_value(section, "exclude_filter", preset->get_exclude_filter());
+ config->set_value(section, "export_path", preset->get_export_path());
+ config->set_value(section, "encryption_include_filters", preset->get_enc_in_filter());
+ config->set_value(section, "encryption_exclude_filters", preset->get_enc_ex_filter());
+ config->set_value(section, "encrypt_pck", preset->get_enc_pck());
+ config->set_value(section, "encrypt_directory", preset->get_enc_directory());
+ config->set_value(section, "script_export_mode", preset->get_script_export_mode());
+ config->set_value(section, "script_encryption_key", preset->get_script_encryption_key());
+
+ String option_section = "preset." + itos(i) + ".options";
+
+ for (const PropertyInfo &E : preset->get_properties()) {
+ config->set_value(option_section, E.name, preset->get(E.name));
+ }
+ }
+
+ config->save("res://export_presets.cfg");
+}
+
+void EditorExport::save_presets() {
+ if (block_save) {
+ return;
+ }
+ save_timer->start();
+}
+
+void EditorExport::_bind_methods() {
+ ADD_SIGNAL(MethodInfo("export_presets_updated"));
+}
+
+void EditorExport::add_export_platform(const Ref<EditorExportPlatform> &p_platform) {
+ export_platforms.push_back(p_platform);
+}
+
+int EditorExport::get_export_platform_count() {
+ return export_platforms.size();
+}
+
+Ref<EditorExportPlatform> EditorExport::get_export_platform(int p_idx) {
+ ERR_FAIL_INDEX_V(p_idx, export_platforms.size(), Ref<EditorExportPlatform>());
+
+ return export_platforms[p_idx];
+}
+
+void EditorExport::add_export_preset(const Ref<EditorExportPreset> &p_preset, int p_at_pos) {
+ if (p_at_pos < 0) {
+ export_presets.push_back(p_preset);
+ } else {
+ export_presets.insert(p_at_pos, p_preset);
+ }
+}
+
+String EditorExportPlatform::test_etc2() const {
+ const bool etc2_supported = ProjectSettings::get_singleton()->get("rendering/textures/vram_compression/import_etc2");
+
+ if (!etc2_supported) {
+ return TTR("Target platform requires 'ETC2' texture compression. Enable 'Import Etc 2' in Project Settings.");
+ }
+
+ return String();
+}
+
+int EditorExport::get_export_preset_count() const {
+ return export_presets.size();
+}
+
+Ref<EditorExportPreset> EditorExport::get_export_preset(int p_idx) {
+ ERR_FAIL_INDEX_V(p_idx, export_presets.size(), Ref<EditorExportPreset>());
+ return export_presets[p_idx];
+}
+
+void EditorExport::remove_export_preset(int p_idx) {
+ export_presets.remove_at(p_idx);
+ save_presets();
+}
+
+void EditorExport::add_export_plugin(const Ref<EditorExportPlugin> &p_plugin) {
+ if (!export_plugins.has(p_plugin)) {
+ export_plugins.push_back(p_plugin);
+ }
+}
+
+void EditorExport::remove_export_plugin(const Ref<EditorExportPlugin> &p_plugin) {
+ export_plugins.erase(p_plugin);
+}
+
+Vector<Ref<EditorExportPlugin>> EditorExport::get_export_plugins() {
+ return export_plugins;
+}
+
+void EditorExport::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ load_config();
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ update_export_presets();
+ } break;
+ }
+}
+
+void EditorExport::load_config() {
+ Ref<ConfigFile> config;
+ config.instantiate();
+ Error err = config->load("res://export_presets.cfg");
+ if (err != OK) {
+ return;
+ }
+
+ block_save = true;
+
+ int index = 0;
+ while (true) {
+ String section = "preset." + itos(index);
+ if (!config->has_section(section)) {
+ break;
+ }
+
+ String platform = config->get_value(section, "platform");
+
+ Ref<EditorExportPreset> preset;
+
+ for (int i = 0; i < export_platforms.size(); i++) {
+ if (export_platforms[i]->get_name() == platform) {
+ preset = export_platforms.write[i]->create_preset();
+ break;
+ }
+ }
+
+ if (!preset.is_valid()) {
+ index++;
+ ERR_CONTINUE(!preset.is_valid());
+ }
+
+ preset->set_name(config->get_value(section, "name"));
+ preset->set_runnable(config->get_value(section, "runnable"));
+
+ if (config->has_section_key(section, "custom_features")) {
+ preset->set_custom_features(config->get_value(section, "custom_features"));
+ }
+
+ String export_filter = config->get_value(section, "export_filter");
+
+ bool get_files = false;
+
+ if (export_filter == "all_resources") {
+ preset->set_export_filter(EditorExportPreset::EXPORT_ALL_RESOURCES);
+ } else if (export_filter == "scenes") {
+ preset->set_export_filter(EditorExportPreset::EXPORT_SELECTED_SCENES);
+ get_files = true;
+ } else if (export_filter == "resources") {
+ preset->set_export_filter(EditorExportPreset::EXPORT_SELECTED_RESOURCES);
+ get_files = true;
+ } else if (export_filter == "exclude") {
+ preset->set_export_filter(EditorExportPreset::EXCLUDE_SELECTED_RESOURCES);
+ get_files = true;
+ }
+
+ if (get_files) {
+ Vector<String> files = config->get_value(section, "export_files");
+
+ for (int i = 0; i < files.size(); i++) {
+ if (!FileAccess::exists(files[i])) {
+ preset->remove_export_file(files[i]);
+ } else {
+ preset->add_export_file(files[i]);
+ }
+ }
+ }
+
+ preset->set_include_filter(config->get_value(section, "include_filter"));
+ preset->set_exclude_filter(config->get_value(section, "exclude_filter"));
+ preset->set_export_path(config->get_value(section, "export_path", ""));
+
+ if (config->has_section_key(section, "encrypt_pck")) {
+ preset->set_enc_pck(config->get_value(section, "encrypt_pck"));
+ }
+ if (config->has_section_key(section, "encrypt_directory")) {
+ preset->set_enc_directory(config->get_value(section, "encrypt_directory"));
+ }
+ if (config->has_section_key(section, "encryption_include_filters")) {
+ preset->set_enc_in_filter(config->get_value(section, "encryption_include_filters"));
+ }
+ if (config->has_section_key(section, "encryption_exclude_filters")) {
+ preset->set_enc_ex_filter(config->get_value(section, "encryption_exclude_filters"));
+ }
+ if (config->has_section_key(section, "script_export_mode")) {
+ preset->set_script_export_mode(config->get_value(section, "script_export_mode"));
+ }
+ if (config->has_section_key(section, "script_encryption_key")) {
+ preset->set_script_encryption_key(config->get_value(section, "script_encryption_key"));
+ }
+
+ String option_section = "preset." + itos(index) + ".options";
+
+ List<String> options;
+
+ config->get_section_keys(option_section, &options);
+
+ for (const String &E : options) {
+ Variant value = config->get_value(option_section, E);
+
+ preset->set(E, value);
+ }
+
+ add_export_preset(preset);
+ index++;
+ }
+
+ block_save = false;
+}
+
+void EditorExport::update_export_presets() {
+ HashMap<StringName, List<EditorExportPlatform::ExportOption>> platform_options;
+
+ for (int i = 0; i < export_platforms.size(); i++) {
+ Ref<EditorExportPlatform> platform = export_platforms[i];
+
+ if (platform->should_update_export_options()) {
+ List<EditorExportPlatform::ExportOption> options;
+ platform->get_export_options(&options);
+
+ platform_options[platform->get_name()] = options;
+ }
+ }
+
+ bool export_presets_updated = false;
+ for (int i = 0; i < export_presets.size(); i++) {
+ Ref<EditorExportPreset> preset = export_presets[i];
+ if (platform_options.has(preset->get_platform()->get_name())) {
+ export_presets_updated = true;
+
+ List<EditorExportPlatform::ExportOption> options = platform_options[preset->get_platform()->get_name()];
+
+ // Copy the previous preset values
+ HashMap<StringName, Variant> previous_values = preset->values;
+
+ // Clear the preset properties and values prior to reloading
+ preset->properties.clear();
+ preset->values.clear();
+
+ for (const EditorExportPlatform::ExportOption &E : options) {
+ preset->properties.push_back(E.option);
+
+ StringName option_name = E.option.name;
+ preset->values[option_name] = previous_values.has(option_name) ? previous_values[option_name] : E.default_value;
+ }
+ }
+ }
+
+ if (export_presets_updated) {
+ emit_signal(_export_presets_updated);
+ }
+}
+
+bool EditorExport::poll_export_platforms() {
+ bool changed = false;
+ for (int i = 0; i < export_platforms.size(); i++) {
+ if (export_platforms.write[i]->poll_export()) {
+ changed = true;
+ }
+ }
+
+ return changed;
+}
+
+EditorExport::EditorExport() {
+ save_timer = memnew(Timer);
+ add_child(save_timer);
+ save_timer->set_wait_time(0.8);
+ save_timer->set_one_shot(true);
+ save_timer->connect("timeout", callable_mp(this, &EditorExport::_save));
+
+ _export_presets_updated = "export_presets_updated";
+
+ singleton = this;
+ set_process(true);
+}
+
+EditorExport::~EditorExport() {
+}
diff --git a/editor/export/editor_export.h b/editor/export/editor_export.h
new file mode 100644
index 0000000000..13c3c34cea
--- /dev/null
+++ b/editor/export/editor_export.h
@@ -0,0 +1,84 @@
+/*************************************************************************/
+/* editor_export.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef EDITOR_EXPORT_H
+#define EDITOR_EXPORT_H
+
+#include "editor_export_platform.h"
+#include "editor_export_plugin.h"
+
+class EditorExport : public Node {
+ GDCLASS(EditorExport, Node);
+
+ Vector<Ref<EditorExportPlatform>> export_platforms;
+ Vector<Ref<EditorExportPreset>> export_presets;
+ Vector<Ref<EditorExportPlugin>> export_plugins;
+
+ StringName _export_presets_updated;
+
+ Timer *save_timer = nullptr;
+ bool block_save = false;
+
+ static EditorExport *singleton;
+
+ void _save();
+
+protected:
+ friend class EditorExportPreset;
+ void save_presets();
+
+ void _notification(int p_what);
+ static void _bind_methods();
+
+public:
+ static EditorExport *get_singleton() { return singleton; }
+
+ void add_export_platform(const Ref<EditorExportPlatform> &p_platform);
+ int get_export_platform_count();
+ Ref<EditorExportPlatform> get_export_platform(int p_idx);
+
+ void add_export_preset(const Ref<EditorExportPreset> &p_preset, int p_at_pos = -1);
+ int get_export_preset_count() const;
+ Ref<EditorExportPreset> get_export_preset(int p_idx);
+ void remove_export_preset(int p_idx);
+
+ void add_export_plugin(const Ref<EditorExportPlugin> &p_plugin);
+ void remove_export_plugin(const Ref<EditorExportPlugin> &p_plugin);
+ Vector<Ref<EditorExportPlugin>> get_export_plugins();
+
+ void load_config();
+ void update_export_presets();
+ bool poll_export_platforms();
+
+ EditorExport();
+ ~EditorExport();
+};
+
+#endif // EDITOR_EXPORT_H
diff --git a/editor/editor_export.cpp b/editor/export/editor_export_platform.cpp
index b09339ce3a..9f64b241c6 100644
--- a/editor/editor_export.cpp
+++ b/editor/export/editor_export_platform.cpp
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* editor_export.cpp */
+/* editor_export_platform.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,28 +28,21 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "editor_export.h"
+#include "editor_export_platform.h"
#include "core/config/project_settings.h"
#include "core/crypto/crypto_core.h"
#include "core/extension/native_extension.h"
-#include "core/io/config_file.h"
-#include "core/io/dir_access.h"
-#include "core/io/file_access.h"
#include "core/io/file_access_encrypted.h"
#include "core/io/file_access_pack.h" // PACK_HEADER_MAGIC, PACK_FORMAT_VERSION
-#include "core/io/resource_loader.h"
-#include "core/io/resource_saver.h"
#include "core/io/zip_io.h"
-#include "core/object/script_language.h"
#include "core/version.h"
#include "editor/editor_file_system.h"
#include "editor/editor_node.h"
#include "editor/editor_paths.h"
#include "editor/editor_scale.h"
-#include "editor/editor_settings.h"
#include "editor/plugins/script_editor_plugin.h"
-#include "scene/resources/resource_format_text.h"
+#include "editor_export_plugin.h"
static int _get_pad(int p_alignment, int p_n) {
int rest = p_n % p_alignment;
@@ -63,196 +56,6 @@ static int _get_pad(int p_alignment, int p_n) {
#define PCK_PADDING 16
-bool EditorExportPreset::_set(const StringName &p_name, const Variant &p_value) {
- if (values.has(p_name)) {
- values[p_name] = p_value;
- EditorExport::singleton->save_presets();
- return true;
- }
-
- return false;
-}
-
-bool EditorExportPreset::_get(const StringName &p_name, Variant &r_ret) const {
- if (values.has(p_name)) {
- r_ret = values[p_name];
- return true;
- }
-
- return false;
-}
-
-void EditorExportPreset::_get_property_list(List<PropertyInfo> *p_list) const {
- for (const PropertyInfo &E : properties) {
- if (platform->get_export_option_visibility(E.name, values)) {
- p_list->push_back(E);
- }
- }
-}
-
-Ref<EditorExportPlatform> EditorExportPreset::get_platform() const {
- return platform;
-}
-
-void EditorExportPreset::update_files_to_export() {
- Vector<String> to_remove;
- for (const String &E : selected_files) {
- if (!FileAccess::exists(E)) {
- to_remove.push_back(E);
- }
- }
- for (int i = 0; i < to_remove.size(); ++i) {
- selected_files.erase(to_remove[i]);
- }
-}
-
-Vector<String> EditorExportPreset::get_files_to_export() const {
- Vector<String> files;
- for (const String &E : selected_files) {
- files.push_back(E);
- }
- return files;
-}
-
-void EditorExportPreset::set_name(const String &p_name) {
- name = p_name;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_name() const {
- return name;
-}
-
-void EditorExportPreset::set_runnable(bool p_enable) {
- runnable = p_enable;
- EditorExport::singleton->save_presets();
-}
-
-bool EditorExportPreset::is_runnable() const {
- return runnable;
-}
-
-void EditorExportPreset::set_export_filter(ExportFilter p_filter) {
- export_filter = p_filter;
- EditorExport::singleton->save_presets();
-}
-
-EditorExportPreset::ExportFilter EditorExportPreset::get_export_filter() const {
- return export_filter;
-}
-
-void EditorExportPreset::set_include_filter(const String &p_include) {
- include_filter = p_include;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_include_filter() const {
- return include_filter;
-}
-
-void EditorExportPreset::set_export_path(const String &p_path) {
- export_path = p_path;
- /* NOTE(SonerSound): if there is a need to implement a PropertyHint that specifically indicates a relative path,
- * this should be removed. */
- if (export_path.is_absolute_path()) {
- String res_path = OS::get_singleton()->get_resource_dir();
- export_path = res_path.path_to_file(export_path);
- }
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_export_path() const {
- return export_path;
-}
-
-void EditorExportPreset::set_exclude_filter(const String &p_exclude) {
- exclude_filter = p_exclude;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_exclude_filter() const {
- return exclude_filter;
-}
-
-void EditorExportPreset::add_export_file(const String &p_path) {
- selected_files.insert(p_path);
- EditorExport::singleton->save_presets();
-}
-
-void EditorExportPreset::remove_export_file(const String &p_path) {
- selected_files.erase(p_path);
- EditorExport::singleton->save_presets();
-}
-
-bool EditorExportPreset::has_export_file(const String &p_path) {
- return selected_files.has(p_path);
-}
-
-void EditorExportPreset::set_custom_features(const String &p_custom_features) {
- custom_features = p_custom_features;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_custom_features() const {
- return custom_features;
-}
-
-void EditorExportPreset::set_enc_in_filter(const String &p_filter) {
- enc_in_filters = p_filter;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_enc_in_filter() const {
- return enc_in_filters;
-}
-
-void EditorExportPreset::set_enc_ex_filter(const String &p_filter) {
- enc_ex_filters = p_filter;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_enc_ex_filter() const {
- return enc_ex_filters;
-}
-
-void EditorExportPreset::set_enc_pck(bool p_enabled) {
- enc_pck = p_enabled;
- EditorExport::singleton->save_presets();
-}
-
-bool EditorExportPreset::get_enc_pck() const {
- return enc_pck;
-}
-
-void EditorExportPreset::set_enc_directory(bool p_enabled) {
- enc_directory = p_enabled;
- EditorExport::singleton->save_presets();
-}
-
-bool EditorExportPreset::get_enc_directory() const {
- return enc_directory;
-}
-
-void EditorExportPreset::set_script_export_mode(int p_mode) {
- script_mode = p_mode;
- EditorExport::singleton->save_presets();
-}
-
-int EditorExportPreset::get_script_export_mode() const {
- return script_mode;
-}
-
-void EditorExportPreset::set_script_encryption_key(const String &p_key) {
- script_key = p_key;
- EditorExport::singleton->save_presets();
-}
-
-String EditorExportPreset::get_script_encryption_key() const {
- return script_key;
-}
-
-///////////////////////////////////
-
bool EditorExportPlatform::fill_log_messages(RichTextLabel *p_log, Error p_err) {
bool has_messages = false;
@@ -272,7 +75,7 @@ bool EditorExportPlatform::fill_log_messages(RichTextLabel *p_log, Error p_err)
} else {
p_log->add_image(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("StatusSuccess"), SNAME("EditorIcons")), 16 * EDSCALE, 16 * EDSCALE, Color(1.0, 1.0, 1.0), INLINE_ALIGNMENT_CENTER);
p_log->add_text(" ");
- p_log->add_text(TTR("Completed successfully."));
+ p_log->add_text(TTR("Completed sucessfully."));
if (msg_count > 0) {
has_messages = true;
}
@@ -625,138 +428,6 @@ void EditorExportPlatform::_edit_filter_list(HashSet<String> &r_list, const Stri
_edit_files_with_filter(da, filters, r_list, exclude);
}
-void EditorExportPlugin::set_export_preset(const Ref<EditorExportPreset> &p_preset) {
- if (p_preset.is_valid()) {
- export_preset = p_preset;
- }
-}
-
-Ref<EditorExportPreset> EditorExportPlugin::get_export_preset() const {
- return export_preset;
-}
-
-void EditorExportPlugin::add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap) {
- ExtraFile ef;
- ef.data = p_file;
- ef.path = p_path;
- ef.remap = p_remap;
- extra_files.push_back(ef);
-}
-
-void EditorExportPlugin::add_shared_object(const String &p_path, const Vector<String> &p_tags, const String &p_target) {
- shared_objects.push_back(SharedObject(p_path, p_tags, p_target));
-}
-
-void EditorExportPlugin::add_ios_framework(const String &p_path) {
- ios_frameworks.push_back(p_path);
-}
-
-void EditorExportPlugin::add_ios_embedded_framework(const String &p_path) {
- ios_embedded_frameworks.push_back(p_path);
-}
-
-Vector<String> EditorExportPlugin::get_ios_frameworks() const {
- return ios_frameworks;
-}
-
-Vector<String> EditorExportPlugin::get_ios_embedded_frameworks() const {
- return ios_embedded_frameworks;
-}
-
-void EditorExportPlugin::add_ios_plist_content(const String &p_plist_content) {
- ios_plist_content += p_plist_content + "\n";
-}
-
-String EditorExportPlugin::get_ios_plist_content() const {
- return ios_plist_content;
-}
-
-void EditorExportPlugin::add_ios_linker_flags(const String &p_flags) {
- if (ios_linker_flags.length() > 0) {
- ios_linker_flags += ' ';
- }
- ios_linker_flags += p_flags;
-}
-
-String EditorExportPlugin::get_ios_linker_flags() const {
- return ios_linker_flags;
-}
-
-void EditorExportPlugin::add_ios_bundle_file(const String &p_path) {
- ios_bundle_files.push_back(p_path);
-}
-
-Vector<String> EditorExportPlugin::get_ios_bundle_files() const {
- return ios_bundle_files;
-}
-
-void EditorExportPlugin::add_ios_cpp_code(const String &p_code) {
- ios_cpp_code += p_code;
-}
-
-String EditorExportPlugin::get_ios_cpp_code() const {
- return ios_cpp_code;
-}
-
-void EditorExportPlugin::add_macos_plugin_file(const String &p_path) {
- macos_plugin_files.push_back(p_path);
-}
-
-const Vector<String> &EditorExportPlugin::get_macos_plugin_files() const {
- return macos_plugin_files;
-}
-
-void EditorExportPlugin::add_ios_project_static_lib(const String &p_path) {
- ios_project_static_libs.push_back(p_path);
-}
-
-Vector<String> EditorExportPlugin::get_ios_project_static_libs() const {
- return ios_project_static_libs;
-}
-
-void EditorExportPlugin::_export_file_script(const String &p_path, const String &p_type, const Vector<String> &p_features) {
- GDVIRTUAL_CALL(_export_file, p_path, p_type, p_features);
-}
-
-void EditorExportPlugin::_export_begin_script(const Vector<String> &p_features, bool p_debug, const String &p_path, int p_flags) {
- GDVIRTUAL_CALL(_export_begin, p_features, p_debug, p_path, p_flags);
-}
-
-void EditorExportPlugin::_export_end_script() {
- GDVIRTUAL_CALL(_export_end);
-}
-
-void EditorExportPlugin::_export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features) {
-}
-
-void EditorExportPlugin::_export_begin(const HashSet<String> &p_features, bool p_debug, const String &p_path, int p_flags) {
-}
-
-void EditorExportPlugin::skip() {
- skipped = true;
-}
-
-void EditorExportPlugin::_bind_methods() {
- ClassDB::bind_method(D_METHOD("add_shared_object", "path", "tags", "target"), &EditorExportPlugin::add_shared_object);
- ClassDB::bind_method(D_METHOD("add_ios_project_static_lib", "path"), &EditorExportPlugin::add_ios_project_static_lib);
- ClassDB::bind_method(D_METHOD("add_file", "path", "file", "remap"), &EditorExportPlugin::add_file);
- ClassDB::bind_method(D_METHOD("add_ios_framework", "path"), &EditorExportPlugin::add_ios_framework);
- ClassDB::bind_method(D_METHOD("add_ios_embedded_framework", "path"), &EditorExportPlugin::add_ios_embedded_framework);
- ClassDB::bind_method(D_METHOD("add_ios_plist_content", "plist_content"), &EditorExportPlugin::add_ios_plist_content);
- ClassDB::bind_method(D_METHOD("add_ios_linker_flags", "flags"), &EditorExportPlugin::add_ios_linker_flags);
- ClassDB::bind_method(D_METHOD("add_ios_bundle_file", "path"), &EditorExportPlugin::add_ios_bundle_file);
- ClassDB::bind_method(D_METHOD("add_ios_cpp_code", "code"), &EditorExportPlugin::add_ios_cpp_code);
- ClassDB::bind_method(D_METHOD("add_macos_plugin_file", "path"), &EditorExportPlugin::add_macos_plugin_file);
- ClassDB::bind_method(D_METHOD("skip"), &EditorExportPlugin::skip);
-
- GDVIRTUAL_BIND(_export_file, "path", "type", "features");
- GDVIRTUAL_BIND(_export_begin, "features", "is_debug", "path", "flags");
- GDVIRTUAL_BIND(_export_end);
-}
-
-EditorExportPlugin::EditorExportPlugin() {
-}
-
EditorExportPlatform::FeatureContainers EditorExportPlatform::get_feature_containers(const Ref<EditorExportPreset> &p_preset, bool p_debug) {
Ref<EditorExportPlatform> platform = p_preset->get_platform();
List<String> feature_list;
@@ -1504,573 +1175,3 @@ void EditorExportPlatform::gen_export_flags(Vector<String> &r_flags, int p_flags
EditorExportPlatform::EditorExportPlatform() {
}
-
-////
-
-EditorExport *EditorExport::singleton = nullptr;
-
-void EditorExport::_save() {
- Ref<ConfigFile> config;
- config.instantiate();
- for (int i = 0; i < export_presets.size(); i++) {
- Ref<EditorExportPreset> preset = export_presets[i];
- String section = "preset." + itos(i);
-
- config->set_value(section, "name", preset->get_name());
- config->set_value(section, "platform", preset->get_platform()->get_name());
- config->set_value(section, "runnable", preset->is_runnable());
- config->set_value(section, "custom_features", preset->get_custom_features());
-
- bool save_files = false;
- switch (preset->get_export_filter()) {
- case EditorExportPreset::EXPORT_ALL_RESOURCES: {
- config->set_value(section, "export_filter", "all_resources");
- } break;
- case EditorExportPreset::EXPORT_SELECTED_SCENES: {
- config->set_value(section, "export_filter", "scenes");
- save_files = true;
- } break;
- case EditorExportPreset::EXPORT_SELECTED_RESOURCES: {
- config->set_value(section, "export_filter", "resources");
- save_files = true;
- } break;
- case EditorExportPreset::EXCLUDE_SELECTED_RESOURCES: {
- config->set_value(section, "export_filter", "exclude");
- save_files = true;
- } break;
- }
-
- if (save_files) {
- Vector<String> export_files = preset->get_files_to_export();
- config->set_value(section, "export_files", export_files);
- }
- config->set_value(section, "include_filter", preset->get_include_filter());
- config->set_value(section, "exclude_filter", preset->get_exclude_filter());
- config->set_value(section, "export_path", preset->get_export_path());
- config->set_value(section, "encryption_include_filters", preset->get_enc_in_filter());
- config->set_value(section, "encryption_exclude_filters", preset->get_enc_ex_filter());
- config->set_value(section, "encrypt_pck", preset->get_enc_pck());
- config->set_value(section, "encrypt_directory", preset->get_enc_directory());
- config->set_value(section, "script_export_mode", preset->get_script_export_mode());
- config->set_value(section, "script_encryption_key", preset->get_script_encryption_key());
-
- String option_section = "preset." + itos(i) + ".options";
-
- for (const PropertyInfo &E : preset->get_properties()) {
- config->set_value(option_section, E.name, preset->get(E.name));
- }
- }
-
- config->save("res://export_presets.cfg");
-}
-
-void EditorExport::save_presets() {
- if (block_save) {
- return;
- }
- save_timer->start();
-}
-
-void EditorExport::_bind_methods() {
- ADD_SIGNAL(MethodInfo("export_presets_updated"));
-}
-
-void EditorExport::add_export_platform(const Ref<EditorExportPlatform> &p_platform) {
- export_platforms.push_back(p_platform);
-}
-
-int EditorExport::get_export_platform_count() {
- return export_platforms.size();
-}
-
-Ref<EditorExportPlatform> EditorExport::get_export_platform(int p_idx) {
- ERR_FAIL_INDEX_V(p_idx, export_platforms.size(), Ref<EditorExportPlatform>());
-
- return export_platforms[p_idx];
-}
-
-void EditorExport::add_export_preset(const Ref<EditorExportPreset> &p_preset, int p_at_pos) {
- if (p_at_pos < 0) {
- export_presets.push_back(p_preset);
- } else {
- export_presets.insert(p_at_pos, p_preset);
- }
-}
-
-String EditorExportPlatform::test_etc2() const {
- const bool etc2_supported = ProjectSettings::get_singleton()->get("rendering/textures/vram_compression/import_etc2");
-
- if (!etc2_supported) {
- return TTR("Target platform requires 'ETC2' texture compression. Enable 'Import Etc 2' in Project Settings.");
- }
-
- return String();
-}
-
-int EditorExport::get_export_preset_count() const {
- return export_presets.size();
-}
-
-Ref<EditorExportPreset> EditorExport::get_export_preset(int p_idx) {
- ERR_FAIL_INDEX_V(p_idx, export_presets.size(), Ref<EditorExportPreset>());
- return export_presets[p_idx];
-}
-
-void EditorExport::remove_export_preset(int p_idx) {
- export_presets.remove_at(p_idx);
- save_presets();
-}
-
-void EditorExport::add_export_plugin(const Ref<EditorExportPlugin> &p_plugin) {
- if (!export_plugins.has(p_plugin)) {
- export_plugins.push_back(p_plugin);
- }
-}
-
-void EditorExport::remove_export_plugin(const Ref<EditorExportPlugin> &p_plugin) {
- export_plugins.erase(p_plugin);
-}
-
-Vector<Ref<EditorExportPlugin>> EditorExport::get_export_plugins() {
- return export_plugins;
-}
-
-void EditorExport::_notification(int p_what) {
- switch (p_what) {
- case NOTIFICATION_ENTER_TREE: {
- load_config();
- } break;
-
- case NOTIFICATION_PROCESS: {
- update_export_presets();
- } break;
- }
-}
-
-void EditorExport::load_config() {
- Ref<ConfigFile> config;
- config.instantiate();
- Error err = config->load("res://export_presets.cfg");
- if (err != OK) {
- return;
- }
-
- block_save = true;
-
- int index = 0;
- while (true) {
- String section = "preset." + itos(index);
- if (!config->has_section(section)) {
- break;
- }
-
- String platform = config->get_value(section, "platform");
-
- Ref<EditorExportPreset> preset;
-
- for (int i = 0; i < export_platforms.size(); i++) {
- if (export_platforms[i]->get_name() == platform) {
- preset = export_platforms.write[i]->create_preset();
- break;
- }
- }
-
- if (!preset.is_valid()) {
- index++;
- ERR_CONTINUE(!preset.is_valid());
- }
-
- preset->set_name(config->get_value(section, "name"));
- preset->set_runnable(config->get_value(section, "runnable"));
-
- if (config->has_section_key(section, "custom_features")) {
- preset->set_custom_features(config->get_value(section, "custom_features"));
- }
-
- String export_filter = config->get_value(section, "export_filter");
-
- bool get_files = false;
-
- if (export_filter == "all_resources") {
- preset->set_export_filter(EditorExportPreset::EXPORT_ALL_RESOURCES);
- } else if (export_filter == "scenes") {
- preset->set_export_filter(EditorExportPreset::EXPORT_SELECTED_SCENES);
- get_files = true;
- } else if (export_filter == "resources") {
- preset->set_export_filter(EditorExportPreset::EXPORT_SELECTED_RESOURCES);
- get_files = true;
- } else if (export_filter == "exclude") {
- preset->set_export_filter(EditorExportPreset::EXCLUDE_SELECTED_RESOURCES);
- get_files = true;
- }
-
- if (get_files) {
- Vector<String> files = config->get_value(section, "export_files");
-
- for (int i = 0; i < files.size(); i++) {
- if (!FileAccess::exists(files[i])) {
- preset->remove_export_file(files[i]);
- } else {
- preset->add_export_file(files[i]);
- }
- }
- }
-
- preset->set_include_filter(config->get_value(section, "include_filter"));
- preset->set_exclude_filter(config->get_value(section, "exclude_filter"));
- preset->set_export_path(config->get_value(section, "export_path", ""));
-
- if (config->has_section_key(section, "encrypt_pck")) {
- preset->set_enc_pck(config->get_value(section, "encrypt_pck"));
- }
- if (config->has_section_key(section, "encrypt_directory")) {
- preset->set_enc_directory(config->get_value(section, "encrypt_directory"));
- }
- if (config->has_section_key(section, "encryption_include_filters")) {
- preset->set_enc_in_filter(config->get_value(section, "encryption_include_filters"));
- }
- if (config->has_section_key(section, "encryption_exclude_filters")) {
- preset->set_enc_ex_filter(config->get_value(section, "encryption_exclude_filters"));
- }
- if (config->has_section_key(section, "script_export_mode")) {
- preset->set_script_export_mode(config->get_value(section, "script_export_mode"));
- }
- if (config->has_section_key(section, "script_encryption_key")) {
- preset->set_script_encryption_key(config->get_value(section, "script_encryption_key"));
- }
-
- String option_section = "preset." + itos(index) + ".options";
-
- List<String> options;
-
- config->get_section_keys(option_section, &options);
-
- for (const String &E : options) {
- Variant value = config->get_value(option_section, E);
-
- preset->set(E, value);
- }
-
- add_export_preset(preset);
- index++;
- }
-
- block_save = false;
-}
-
-void EditorExport::update_export_presets() {
- HashMap<StringName, List<EditorExportPlatform::ExportOption>> platform_options;
-
- for (int i = 0; i < export_platforms.size(); i++) {
- Ref<EditorExportPlatform> platform = export_platforms[i];
-
- if (platform->should_update_export_options()) {
- List<EditorExportPlatform::ExportOption> options;
- platform->get_export_options(&options);
-
- platform_options[platform->get_name()] = options;
- }
- }
-
- bool export_presets_updated = false;
- for (int i = 0; i < export_presets.size(); i++) {
- Ref<EditorExportPreset> preset = export_presets[i];
- if (platform_options.has(preset->get_platform()->get_name())) {
- export_presets_updated = true;
-
- List<EditorExportPlatform::ExportOption> options = platform_options[preset->get_platform()->get_name()];
-
- // Copy the previous preset values
- HashMap<StringName, Variant> previous_values = preset->values;
-
- // Clear the preset properties and values prior to reloading
- preset->properties.clear();
- preset->values.clear();
-
- for (const EditorExportPlatform::ExportOption &E : options) {
- preset->properties.push_back(E.option);
-
- StringName option_name = E.option.name;
- preset->values[option_name] = previous_values.has(option_name) ? previous_values[option_name] : E.default_value;
- }
- }
- }
-
- if (export_presets_updated) {
- emit_signal(_export_presets_updated);
- }
-}
-
-bool EditorExport::poll_export_platforms() {
- bool changed = false;
- for (int i = 0; i < export_platforms.size(); i++) {
- if (export_platforms.write[i]->poll_export()) {
- changed = true;
- }
- }
-
- return changed;
-}
-
-EditorExport::EditorExport() {
- save_timer = memnew(Timer);
- add_child(save_timer);
- save_timer->set_wait_time(0.8);
- save_timer->set_one_shot(true);
- save_timer->connect("timeout", callable_mp(this, &EditorExport::_save));
-
- _export_presets_updated = "export_presets_updated";
-
- singleton = this;
- set_process(true);
-}
-
-EditorExport::~EditorExport() {
-}
-
-//////////
-
-void EditorExportPlatformPC::get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) {
- if (p_preset->get("texture_format/s3tc")) {
- r_features->push_back("s3tc");
- }
- if (p_preset->get("texture_format/etc")) {
- r_features->push_back("etc");
- }
- if (p_preset->get("texture_format/etc2")) {
- r_features->push_back("etc2");
- }
-
- if (p_preset->get("binary_format/64_bits")) {
- r_features->push_back("64");
- } else {
- r_features->push_back("32");
- }
-}
-
-void EditorExportPlatformPC::get_export_options(List<ExportOption> *r_options) {
- String ext_filter = (get_os_name() == "Windows") ? "*.exe" : "";
- r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE, ext_filter), ""));
- r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE, ext_filter), ""));
-
- r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "debug/export_console_script", PROPERTY_HINT_ENUM, "No,Debug Only,Debug and Release"), 1));
-
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/64_bits"), true));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/embed_pck"), false));
-
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/bptc"), false));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), true));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), false));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/no_bptc_fallbacks"), true));
-}
-
-String EditorExportPlatformPC::get_name() const {
- return name;
-}
-
-String EditorExportPlatformPC::get_os_name() const {
- return os_name;
-}
-
-Ref<Texture2D> EditorExportPlatformPC::get_logo() const {
- return logo;
-}
-
-bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const {
- String err;
- bool valid = false;
-
- // Look for export templates (first official, and if defined custom templates).
-
- bool use64 = p_preset->get("binary_format/64_bits");
- bool dvalid = exists_export_template(get_template_file_name("debug", use64 ? "x86_64" : "x86_32"), &err);
- bool rvalid = exists_export_template(get_template_file_name("release", use64 ? "x86_64" : "x86_32"), &err);
-
- if (p_preset->get("custom_template/debug") != "") {
- dvalid = FileAccess::exists(p_preset->get("custom_template/debug"));
- if (!dvalid) {
- err += TTR("Custom debug template not found.") + "\n";
- }
- }
- if (p_preset->get("custom_template/release") != "") {
- rvalid = FileAccess::exists(p_preset->get("custom_template/release"));
- if (!rvalid) {
- err += TTR("Custom release template not found.") + "\n";
- }
- }
-
- valid = dvalid || rvalid;
- r_missing_templates = !valid;
-
- if (!err.is_empty()) {
- r_error = err;
- }
- return valid;
-}
-
-Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
- ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags);
-
- Error err = prepare_template(p_preset, p_debug, p_path, p_flags);
- if (err == OK) {
- err = modify_template(p_preset, p_debug, p_path, p_flags);
- }
- if (err == OK) {
- err = export_project_data(p_preset, p_debug, p_path, p_flags);
- }
-
- return err;
-}
-
-Error EditorExportPlatformPC::prepare_template(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
- if (!DirAccess::exists(p_path.get_base_dir())) {
- add_message(EXPORT_MESSAGE_ERROR, TTR("Prepare Template"), TTR("The given export path doesn't exist."));
- return ERR_FILE_BAD_PATH;
- }
-
- String custom_debug = p_preset->get("custom_template/debug");
- String custom_release = p_preset->get("custom_template/release");
-
- String template_path = p_debug ? custom_debug : custom_release;
-
- template_path = template_path.strip_edges();
-
- if (template_path.is_empty()) {
- template_path = find_export_template(get_template_file_name(p_debug ? "debug" : "release", p_preset->get("binary_format/64_bits") ? "64" : "32"));
- }
-
- if (!template_path.is_empty() && !FileAccess::exists(template_path)) {
- add_message(EXPORT_MESSAGE_ERROR, TTR("Prepare Template"), vformat(TTR("Template file not found: \"%s\"."), template_path));
- return ERR_FILE_NOT_FOUND;
- }
-
- Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
- da->make_dir_recursive(p_path.get_base_dir());
- Error err = da->copy(template_path, p_path, get_chmod_flags());
- if (err != OK) {
- add_message(EXPORT_MESSAGE_ERROR, TTR("Prepare Template"), TTR("Failed to copy export template."));
- }
-
- return err;
-}
-
-Error EditorExportPlatformPC::export_project_data(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
- String pck_path;
- if (p_preset->get("binary_format/embed_pck")) {
- pck_path = p_path;
- } else {
- pck_path = p_path.get_basename() + ".pck";
- }
-
- Vector<SharedObject> so_files;
-
- int64_t embedded_pos;
- int64_t embedded_size;
- Error err = save_pack(p_preset, p_debug, pck_path, &so_files, p_preset->get("binary_format/embed_pck"), &embedded_pos, &embedded_size);
- if (err == OK && p_preset->get("binary_format/embed_pck")) {
- if (embedded_size >= 0x100000000 && !p_preset->get("binary_format/64_bits")) {
- add_message(EXPORT_MESSAGE_ERROR, TTR("PCK Embedding"), TTR("On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."));
- return ERR_INVALID_PARAMETER;
- }
-
- err = fixup_embedded_pck(p_path, embedded_pos, embedded_size);
- }
-
- if (err == OK && !so_files.is_empty()) {
- // If shared object files, copy them.
- Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
- for (int i = 0; i < so_files.size() && err == OK; i++) {
- String src_path = ProjectSettings::get_singleton()->globalize_path(so_files[i].path);
- String target_path;
- if (so_files[i].target.is_empty()) {
- target_path = p_path.get_base_dir().plus_file(src_path.get_file());
- } else {
- target_path = p_path.get_base_dir().plus_file(so_files[i].target).plus_file(src_path.get_file());
- }
-
- if (da->dir_exists(src_path)) {
- err = da->make_dir_recursive(target_path);
- if (err == OK) {
- err = da->copy_dir(src_path, target_path, -1, true);
- }
- } else {
- err = da->copy(src_path, target_path);
- if (err == OK) {
- err = sign_shared_object(p_preset, p_debug, target_path);
- }
- }
- }
- }
-
- return err;
-}
-
-Error EditorExportPlatformPC::sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path) {
- return OK;
-}
-
-void EditorExportPlatformPC::set_name(const String &p_name) {
- name = p_name;
-}
-
-void EditorExportPlatformPC::set_os_name(const String &p_name) {
- os_name = p_name;
-}
-
-void EditorExportPlatformPC::set_logo(const Ref<Texture2D> &p_logo) {
- logo = p_logo;
-}
-
-void EditorExportPlatformPC::get_platform_features(List<String> *r_features) {
- r_features->push_back("pc"); //all pcs support "pc"
- r_features->push_back("s3tc"); //all pcs support "s3tc" compression
- r_features->push_back(get_os_name().to_lower()); //OS name is a feature
-}
-
-void EditorExportPlatformPC::resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, HashSet<String> &p_features) {
- if (p_features.has("bptc")) {
- if (p_preset->has("texture_format/no_bptc_fallbacks")) {
- p_features.erase("s3tc");
- }
- }
-}
-
-int EditorExportPlatformPC::get_chmod_flags() const {
- return chmod_flags;
-}
-
-void EditorExportPlatformPC::set_chmod_flags(int p_flags) {
- chmod_flags = p_flags;
-}
-
-///////////////////////
-
-void EditorExportTextSceneToBinaryPlugin::_export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features) {
- String extension = p_path.get_extension().to_lower();
- if (extension != "tres" && extension != "tscn") {
- return;
- }
-
- bool convert = GLOBAL_GET("editor/export/convert_text_resources_to_binary");
- if (!convert) {
- return;
- }
- String tmp_path = EditorPaths::get_singleton()->get_cache_dir().plus_file("tmpfile.res");
- Error err = ResourceFormatLoaderText::convert_file_to_binary(p_path, tmp_path);
- if (err != OK) {
- DirAccess::remove_file_or_error(tmp_path);
- ERR_FAIL();
- }
- Vector<uint8_t> data = FileAccess::get_file_as_array(tmp_path);
- if (data.size() == 0) {
- DirAccess::remove_file_or_error(tmp_path);
- ERR_FAIL();
- }
- DirAccess::remove_file_or_error(tmp_path);
- add_file(p_path + ".converted.res", data, true);
-}
-
-EditorExportTextSceneToBinaryPlugin::EditorExportTextSceneToBinaryPlugin() {
- GLOBAL_DEF("editor/export/convert_text_resources_to_binary", false);
-}
diff --git a/editor/export/editor_export_platform.h b/editor/export/editor_export_platform.h
new file mode 100644
index 0000000000..2778a217b0
--- /dev/null
+++ b/editor/export/editor_export_platform.h
@@ -0,0 +1,221 @@
+/*************************************************************************/
+/* editor_export_platform.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef EDITOR_EXPORT_PLATFORM_H
+#define EDITOR_EXPORT_PLATFORM_H
+
+class EditorFileSystemDirectory;
+struct EditorProgress;
+
+#include "core/io/dir_access.h"
+#include "editor_export_preset.h"
+#include "editor_export_shared_object.h"
+#include "scene/gui/rich_text_label.h"
+#include "scene/main/node.h"
+
+class EditorExportPlatform : public RefCounted {
+ GDCLASS(EditorExportPlatform, RefCounted);
+
+public:
+ typedef Error (*EditorExportSaveFunction)(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total, const Vector<String> &p_enc_in_filters, const Vector<String> &p_enc_ex_filters, const Vector<uint8_t> &p_key);
+ typedef Error (*EditorExportSaveSharedObject)(void *p_userdata, const SharedObject &p_so);
+
+ enum ExportMessageType {
+ EXPORT_MESSAGE_NONE,
+ EXPORT_MESSAGE_INFO,
+ EXPORT_MESSAGE_WARNING,
+ EXPORT_MESSAGE_ERROR,
+ };
+
+ struct ExportMessage {
+ ExportMessageType msg_type;
+ String category;
+ String text;
+ };
+
+private:
+ struct SavedData {
+ uint64_t ofs = 0;
+ uint64_t size = 0;
+ bool encrypted = false;
+ Vector<uint8_t> md5;
+ CharString path_utf8;
+
+ bool operator<(const SavedData &p_data) const {
+ return path_utf8 < p_data.path_utf8;
+ }
+ };
+
+ struct PackData {
+ Ref<FileAccess> f;
+ Vector<SavedData> file_ofs;
+ EditorProgress *ep = nullptr;
+ Vector<SharedObject> *so_files = nullptr;
+ };
+
+ struct ZipData {
+ void *zip = nullptr;
+ EditorProgress *ep = nullptr;
+ };
+
+ struct FeatureContainers {
+ HashSet<String> features;
+ Vector<String> features_pv;
+ };
+
+ Vector<ExportMessage> messages;
+
+ void _export_find_resources(EditorFileSystemDirectory *p_dir, HashSet<String> &p_paths);
+ void _export_find_dependencies(const String &p_path, HashSet<String> &p_paths);
+
+ void gen_debug_flags(Vector<String> &r_flags, int p_flags);
+ static Error _save_pack_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total, const Vector<String> &p_enc_in_filters, const Vector<String> &p_enc_ex_filters, const Vector<uint8_t> &p_key);
+ static Error _save_zip_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total, const Vector<String> &p_enc_in_filters, const Vector<String> &p_enc_ex_filters, const Vector<uint8_t> &p_key);
+
+ void _edit_files_with_filter(Ref<DirAccess> &da, const Vector<String> &p_filters, HashSet<String> &r_list, bool exclude);
+ void _edit_filter_list(HashSet<String> &r_list, const String &p_filter, bool exclude);
+
+ static Error _add_shared_object(void *p_userdata, const SharedObject &p_so);
+
+protected:
+ struct ExportNotifier {
+ ExportNotifier(EditorExportPlatform &p_platform, const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags);
+ ~ExportNotifier();
+ };
+
+ FeatureContainers get_feature_containers(const Ref<EditorExportPreset> &p_preset, bool p_debug);
+
+ bool exists_export_template(String template_file_name, String *err) const;
+ String find_export_template(String template_file_name, String *err = nullptr) const;
+ void gen_export_flags(Vector<String> &r_flags, int p_flags);
+
+public:
+ virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) = 0;
+
+ struct ExportOption {
+ PropertyInfo option;
+ Variant default_value;
+
+ ExportOption(const PropertyInfo &p_info, const Variant &p_default) :
+ option(p_info),
+ default_value(p_default) {
+ }
+ ExportOption() {}
+ };
+
+ virtual Ref<EditorExportPreset> create_preset();
+
+ virtual void clear_messages() { messages.clear(); }
+ virtual void add_message(ExportMessageType p_type, const String &p_category, const String &p_message) {
+ ExportMessage msg;
+ msg.category = p_category;
+ msg.text = p_message;
+ msg.msg_type = p_type;
+ messages.push_back(msg);
+ switch (p_type) {
+ case EXPORT_MESSAGE_INFO: {
+ print_line(vformat("%s: %s\n", msg.category, msg.text));
+ } break;
+ case EXPORT_MESSAGE_WARNING: {
+ WARN_PRINT(vformat("%s: %s\n", msg.category, msg.text));
+ } break;
+ case EXPORT_MESSAGE_ERROR: {
+ ERR_PRINT(vformat("%s: %s\n", msg.category, msg.text));
+ } break;
+ default:
+ break;
+ }
+ }
+
+ virtual int get_message_count() const {
+ return messages.size();
+ }
+
+ virtual ExportMessage get_message(int p_index) const {
+ ERR_FAIL_INDEX_V(p_index, messages.size(), ExportMessage());
+ return messages[p_index];
+ }
+
+ virtual ExportMessageType get_worst_message_type() const {
+ ExportMessageType worst_type = EXPORT_MESSAGE_NONE;
+ for (int i = 0; i < messages.size(); i++) {
+ worst_type = MAX(worst_type, messages[i].msg_type);
+ }
+ return worst_type;
+ }
+
+ virtual bool fill_log_messages(RichTextLabel *p_log, Error p_err);
+
+ virtual void get_export_options(List<ExportOption> *r_options) = 0;
+ virtual bool should_update_export_options() { return false; }
+ virtual bool get_export_option_visibility(const String &p_option, const HashMap<StringName, Variant> &p_options) const { return true; }
+
+ virtual String get_os_name() const = 0;
+ virtual String get_name() const = 0;
+ virtual Ref<Texture2D> get_logo() const = 0;
+
+ Error export_project_files(const Ref<EditorExportPreset> &p_preset, bool p_debug, EditorExportSaveFunction p_func, void *p_udata, EditorExportSaveSharedObject p_so_func = nullptr);
+
+ Error save_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, Vector<SharedObject> *p_so_files = nullptr, bool p_embed = false, int64_t *r_embedded_start = nullptr, int64_t *r_embedded_size = nullptr);
+ Error save_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path);
+
+ virtual bool poll_export() { return false; }
+ virtual int get_options_count() const { return 0; }
+ virtual String get_options_tooltip() const { return ""; }
+ virtual Ref<ImageTexture> get_option_icon(int p_index) const;
+ virtual String get_option_label(int p_device) const { return ""; }
+ virtual String get_option_tooltip(int p_device) const { return ""; }
+
+ enum DebugFlags {
+ DEBUG_FLAG_DUMB_CLIENT = 1,
+ DEBUG_FLAG_REMOTE_DEBUG = 2,
+ DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST = 4,
+ DEBUG_FLAG_VIEW_COLLISONS = 8,
+ DEBUG_FLAG_VIEW_NAVIGATION = 16,
+ };
+
+ virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) { return OK; }
+ virtual Ref<Texture2D> get_run_icon() const { return get_logo(); }
+
+ String test_etc2() const;
+ virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const = 0;
+
+ virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const = 0;
+ virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) = 0;
+ virtual Error export_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0);
+ virtual Error export_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0);
+ virtual void get_platform_features(List<String> *r_features) = 0;
+ virtual void resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, HashSet<String> &p_features) = 0;
+ virtual String get_debug_protocol() const { return "tcp://"; }
+
+ EditorExportPlatform();
+};
+
+#endif // EDITOR_EXPORT_PLATFORM_H
diff --git a/editor/export/editor_export_platform_pc.cpp b/editor/export/editor_export_platform_pc.cpp
new file mode 100644
index 0000000000..b60fba13ed
--- /dev/null
+++ b/editor/export/editor_export_platform_pc.cpp
@@ -0,0 +1,247 @@
+/*************************************************************************/
+/* editor_export_platform_pc.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "editor_export_platform_pc.h"
+
+#include "core/config/project_settings.h"
+
+void EditorExportPlatformPC::get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) {
+ if (p_preset->get("texture_format/s3tc")) {
+ r_features->push_back("s3tc");
+ }
+ if (p_preset->get("texture_format/etc")) {
+ r_features->push_back("etc");
+ }
+ if (p_preset->get("texture_format/etc2")) {
+ r_features->push_back("etc2");
+ }
+
+ if (p_preset->get("binary_format/64_bits")) {
+ r_features->push_back("64");
+ } else {
+ r_features->push_back("32");
+ }
+}
+
+void EditorExportPlatformPC::get_export_options(List<ExportOption> *r_options) {
+ String ext_filter = (get_os_name() == "Windows") ? "*.exe" : "";
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE, ext_filter), ""));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE, ext_filter), ""));
+
+ r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "debug/export_console_script", PROPERTY_HINT_ENUM, "No,Debug Only,Debug and Release"), 1));
+
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/64_bits"), true));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/embed_pck"), false));
+
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/bptc"), false));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), true));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), false));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/no_bptc_fallbacks"), true));
+}
+
+String EditorExportPlatformPC::get_name() const {
+ return name;
+}
+
+String EditorExportPlatformPC::get_os_name() const {
+ return os_name;
+}
+
+Ref<Texture2D> EditorExportPlatformPC::get_logo() const {
+ return logo;
+}
+
+bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const {
+ String err;
+ bool valid = false;
+
+ // Look for export templates (first official, and if defined custom templates).
+
+ bool use64 = p_preset->get("binary_format/64_bits");
+ bool dvalid = exists_export_template(get_template_file_name("debug", use64 ? "x86_64" : "x86_32"), &err);
+ bool rvalid = exists_export_template(get_template_file_name("release", use64 ? "x86_64" : "x86_32"), &err);
+
+ if (p_preset->get("custom_template/debug") != "") {
+ dvalid = FileAccess::exists(p_preset->get("custom_template/debug"));
+ if (!dvalid) {
+ err += TTR("Custom debug template not found.") + "\n";
+ }
+ }
+ if (p_preset->get("custom_template/release") != "") {
+ rvalid = FileAccess::exists(p_preset->get("custom_template/release"));
+ if (!rvalid) {
+ err += TTR("Custom release template not found.") + "\n";
+ }
+ }
+
+ valid = dvalid || rvalid;
+ r_missing_templates = !valid;
+
+ if (!err.is_empty()) {
+ r_error = err;
+ }
+ return valid;
+}
+
+Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
+ ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags);
+
+ Error err = prepare_template(p_preset, p_debug, p_path, p_flags);
+ if (err == OK) {
+ err = modify_template(p_preset, p_debug, p_path, p_flags);
+ }
+ if (err == OK) {
+ err = export_project_data(p_preset, p_debug, p_path, p_flags);
+ }
+
+ return err;
+}
+
+Error EditorExportPlatformPC::prepare_template(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
+ if (!DirAccess::exists(p_path.get_base_dir())) {
+ add_message(EXPORT_MESSAGE_ERROR, TTR("Prepare Template"), TTR("The given export path doesn't exist."));
+ return ERR_FILE_BAD_PATH;
+ }
+
+ String custom_debug = p_preset->get("custom_template/debug");
+ String custom_release = p_preset->get("custom_template/release");
+
+ String template_path = p_debug ? custom_debug : custom_release;
+
+ template_path = template_path.strip_edges();
+
+ if (template_path.is_empty()) {
+ template_path = find_export_template(get_template_file_name(p_debug ? "debug" : "release", p_preset->get("binary_format/64_bits") ? "64" : "32"));
+ }
+
+ if (!template_path.is_empty() && !FileAccess::exists(template_path)) {
+ add_message(EXPORT_MESSAGE_ERROR, TTR("Prepare Template"), vformat(TTR("Template file not found: \"%s\"."), template_path));
+ return ERR_FILE_NOT_FOUND;
+ }
+
+ Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
+ da->make_dir_recursive(p_path.get_base_dir());
+ Error err = da->copy(template_path, p_path, get_chmod_flags());
+ if (err != OK) {
+ add_message(EXPORT_MESSAGE_ERROR, TTR("Prepare Template"), TTR("Failed to copy export template."));
+ }
+
+ return err;
+}
+
+Error EditorExportPlatformPC::export_project_data(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
+ String pck_path;
+ if (p_preset->get("binary_format/embed_pck")) {
+ pck_path = p_path;
+ } else {
+ pck_path = p_path.get_basename() + ".pck";
+ }
+
+ Vector<SharedObject> so_files;
+
+ int64_t embedded_pos;
+ int64_t embedded_size;
+ Error err = save_pack(p_preset, p_debug, pck_path, &so_files, p_preset->get("binary_format/embed_pck"), &embedded_pos, &embedded_size);
+ if (err == OK && p_preset->get("binary_format/embed_pck")) {
+ if (embedded_size >= 0x100000000 && !p_preset->get("binary_format/64_bits")) {
+ add_message(EXPORT_MESSAGE_ERROR, TTR("PCK Embedding"), TTR("On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."));
+ return ERR_INVALID_PARAMETER;
+ }
+
+ err = fixup_embedded_pck(p_path, embedded_pos, embedded_size);
+ }
+
+ if (err == OK && !so_files.is_empty()) {
+ // If shared object files, copy them.
+ Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
+ for (int i = 0; i < so_files.size() && err == OK; i++) {
+ String src_path = ProjectSettings::get_singleton()->globalize_path(so_files[i].path);
+ String target_path;
+ if (so_files[i].target.is_empty()) {
+ target_path = p_path.get_base_dir().plus_file(src_path.get_file());
+ } else {
+ target_path = p_path.get_base_dir().plus_file(so_files[i].target).plus_file(src_path.get_file());
+ }
+
+ if (da->dir_exists(src_path)) {
+ err = da->make_dir_recursive(target_path);
+ if (err == OK) {
+ err = da->copy_dir(src_path, target_path, -1, true);
+ }
+ } else {
+ err = da->copy(src_path, target_path);
+ if (err == OK) {
+ err = sign_shared_object(p_preset, p_debug, target_path);
+ }
+ }
+ }
+ }
+
+ return err;
+}
+
+Error EditorExportPlatformPC::sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path) {
+ return OK;
+}
+
+void EditorExportPlatformPC::set_name(const String &p_name) {
+ name = p_name;
+}
+
+void EditorExportPlatformPC::set_os_name(const String &p_name) {
+ os_name = p_name;
+}
+
+void EditorExportPlatformPC::set_logo(const Ref<Texture2D> &p_logo) {
+ logo = p_logo;
+}
+
+void EditorExportPlatformPC::get_platform_features(List<String> *r_features) {
+ r_features->push_back("pc"); //all pcs support "pc"
+ r_features->push_back("s3tc"); //all pcs support "s3tc" compression
+ r_features->push_back(get_os_name().to_lower()); //OS name is a feature
+}
+
+void EditorExportPlatformPC::resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, HashSet<String> &p_features) {
+ if (p_features.has("bptc")) {
+ if (p_preset->has("texture_format/no_bptc_fallbacks")) {
+ p_features.erase("s3tc");
+ }
+ }
+}
+
+int EditorExportPlatformPC::get_chmod_flags() const {
+ return chmod_flags;
+}
+
+void EditorExportPlatformPC::set_chmod_flags(int p_flags) {
+ chmod_flags = p_flags;
+}
diff --git a/editor/export/editor_export_platform_pc.h b/editor/export/editor_export_platform_pc.h
new file mode 100644
index 0000000000..ae7d6f1082
--- /dev/null
+++ b/editor/export/editor_export_platform_pc.h
@@ -0,0 +1,82 @@
+/*************************************************************************/
+/* editor_export_platform_pc.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef EDITOR_EXPORT_PLATFORM_PC_H
+#define EDITOR_EXPORT_PLATFORM_PC_H
+
+#include "editor_export_platform.h"
+
+class EditorExportPlatformPC : public EditorExportPlatform {
+ GDCLASS(EditorExportPlatformPC, EditorExportPlatform);
+
+private:
+ Ref<ImageTexture> logo;
+ String name;
+ String os_name;
+
+ int chmod_flags = -1;
+
+public:
+ virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) override;
+
+ virtual void get_export_options(List<ExportOption> *r_options) override;
+
+ virtual String get_name() const override;
+ virtual String get_os_name() const override;
+ virtual Ref<Texture2D> get_logo() const override;
+
+ virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const override;
+ virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) override;
+ virtual Error sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path);
+ virtual String get_template_file_name(const String &p_target, const String &p_arch) const = 0;
+
+ virtual Error prepare_template(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags);
+ virtual Error modify_template(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { return OK; };
+ virtual Error export_project_data(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags);
+
+ void set_extension(const String &p_extension, const String &p_feature_key = "default");
+ void set_name(const String &p_name);
+ void set_os_name(const String &p_name);
+
+ void set_logo(const Ref<Texture2D> &p_logo);
+
+ void add_platform_feature(const String &p_feature);
+ virtual void get_platform_features(List<String> *r_features) override;
+ virtual void resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, HashSet<String> &p_features) override;
+
+ int get_chmod_flags() const;
+ void set_chmod_flags(int p_flags);
+
+ virtual Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) {
+ return Error::OK;
+ }
+};
+
+#endif // EDITOR_EXPORT_PLATFORM_PC_H
diff --git a/editor/export/editor_export_plugin.cpp b/editor/export/editor_export_plugin.cpp
new file mode 100644
index 0000000000..cf3a9b0810
--- /dev/null
+++ b/editor/export/editor_export_plugin.cpp
@@ -0,0 +1,201 @@
+/*************************************************************************/
+/* editor_export_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "editor_export_plugin.h"
+
+#include "core/config/project_settings.h"
+#include "core/io/dir_access.h"
+#include "core/io/file_access.h"
+#include "editor/editor_paths.h"
+#include "editor/export/editor_export_platform.h"
+#include "scene/resources/resource_format_text.h"
+
+void EditorExportPlugin::set_export_preset(const Ref<EditorExportPreset> &p_preset) {
+ if (p_preset.is_valid()) {
+ export_preset = p_preset;
+ }
+}
+
+Ref<EditorExportPreset> EditorExportPlugin::get_export_preset() const {
+ return export_preset;
+}
+
+void EditorExportPlugin::add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap) {
+ ExtraFile ef;
+ ef.data = p_file;
+ ef.path = p_path;
+ ef.remap = p_remap;
+ extra_files.push_back(ef);
+}
+
+void EditorExportPlugin::add_shared_object(const String &p_path, const Vector<String> &p_tags, const String &p_target) {
+ shared_objects.push_back(SharedObject(p_path, p_tags, p_target));
+}
+
+void EditorExportPlugin::add_ios_framework(const String &p_path) {
+ ios_frameworks.push_back(p_path);
+}
+
+void EditorExportPlugin::add_ios_embedded_framework(const String &p_path) {
+ ios_embedded_frameworks.push_back(p_path);
+}
+
+Vector<String> EditorExportPlugin::get_ios_frameworks() const {
+ return ios_frameworks;
+}
+
+Vector<String> EditorExportPlugin::get_ios_embedded_frameworks() const {
+ return ios_embedded_frameworks;
+}
+
+void EditorExportPlugin::add_ios_plist_content(const String &p_plist_content) {
+ ios_plist_content += p_plist_content + "\n";
+}
+
+String EditorExportPlugin::get_ios_plist_content() const {
+ return ios_plist_content;
+}
+
+void EditorExportPlugin::add_ios_linker_flags(const String &p_flags) {
+ if (ios_linker_flags.length() > 0) {
+ ios_linker_flags += ' ';
+ }
+ ios_linker_flags += p_flags;
+}
+
+String EditorExportPlugin::get_ios_linker_flags() const {
+ return ios_linker_flags;
+}
+
+void EditorExportPlugin::add_ios_bundle_file(const String &p_path) {
+ ios_bundle_files.push_back(p_path);
+}
+
+Vector<String> EditorExportPlugin::get_ios_bundle_files() const {
+ return ios_bundle_files;
+}
+
+void EditorExportPlugin::add_ios_cpp_code(const String &p_code) {
+ ios_cpp_code += p_code;
+}
+
+String EditorExportPlugin::get_ios_cpp_code() const {
+ return ios_cpp_code;
+}
+
+void EditorExportPlugin::add_macos_plugin_file(const String &p_path) {
+ macos_plugin_files.push_back(p_path);
+}
+
+const Vector<String> &EditorExportPlugin::get_macos_plugin_files() const {
+ return macos_plugin_files;
+}
+
+void EditorExportPlugin::add_ios_project_static_lib(const String &p_path) {
+ ios_project_static_libs.push_back(p_path);
+}
+
+Vector<String> EditorExportPlugin::get_ios_project_static_libs() const {
+ return ios_project_static_libs;
+}
+
+void EditorExportPlugin::_export_file_script(const String &p_path, const String &p_type, const Vector<String> &p_features) {
+ GDVIRTUAL_CALL(_export_file, p_path, p_type, p_features);
+}
+
+void EditorExportPlugin::_export_begin_script(const Vector<String> &p_features, bool p_debug, const String &p_path, int p_flags) {
+ GDVIRTUAL_CALL(_export_begin, p_features, p_debug, p_path, p_flags);
+}
+
+void EditorExportPlugin::_export_end_script() {
+ GDVIRTUAL_CALL(_export_end);
+}
+
+void EditorExportPlugin::_export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features) {
+}
+
+void EditorExportPlugin::_export_begin(const HashSet<String> &p_features, bool p_debug, const String &p_path, int p_flags) {
+}
+
+void EditorExportPlugin::skip() {
+ skipped = true;
+}
+
+void EditorExportPlugin::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("add_shared_object", "path", "tags", "target"), &EditorExportPlugin::add_shared_object);
+ ClassDB::bind_method(D_METHOD("add_ios_project_static_lib", "path"), &EditorExportPlugin::add_ios_project_static_lib);
+ ClassDB::bind_method(D_METHOD("add_file", "path", "file", "remap"), &EditorExportPlugin::add_file);
+ ClassDB::bind_method(D_METHOD("add_ios_framework", "path"), &EditorExportPlugin::add_ios_framework);
+ ClassDB::bind_method(D_METHOD("add_ios_embedded_framework", "path"), &EditorExportPlugin::add_ios_embedded_framework);
+ ClassDB::bind_method(D_METHOD("add_ios_plist_content", "plist_content"), &EditorExportPlugin::add_ios_plist_content);
+ ClassDB::bind_method(D_METHOD("add_ios_linker_flags", "flags"), &EditorExportPlugin::add_ios_linker_flags);
+ ClassDB::bind_method(D_METHOD("add_ios_bundle_file", "path"), &EditorExportPlugin::add_ios_bundle_file);
+ ClassDB::bind_method(D_METHOD("add_ios_cpp_code", "code"), &EditorExportPlugin::add_ios_cpp_code);
+ ClassDB::bind_method(D_METHOD("add_macos_plugin_file", "path"), &EditorExportPlugin::add_macos_plugin_file);
+ ClassDB::bind_method(D_METHOD("skip"), &EditorExportPlugin::skip);
+
+ GDVIRTUAL_BIND(_export_file, "path", "type", "features");
+ GDVIRTUAL_BIND(_export_begin, "features", "is_debug", "path", "flags");
+ GDVIRTUAL_BIND(_export_end);
+}
+
+EditorExportPlugin::EditorExportPlugin() {
+}
+
+///////////////////////
+
+void EditorExportTextSceneToBinaryPlugin::_export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features) {
+ String extension = p_path.get_extension().to_lower();
+ if (extension != "tres" && extension != "tscn") {
+ return;
+ }
+
+ bool convert = GLOBAL_GET("editor/export/convert_text_resources_to_binary");
+ if (!convert) {
+ return;
+ }
+ String tmp_path = EditorPaths::get_singleton()->get_cache_dir().plus_file("tmpfile.res");
+ Error err = ResourceFormatLoaderText::convert_file_to_binary(p_path, tmp_path);
+ if (err != OK) {
+ DirAccess::remove_file_or_error(tmp_path);
+ ERR_FAIL();
+ }
+ Vector<uint8_t> data = FileAccess::get_file_as_array(tmp_path);
+ if (data.size() == 0) {
+ DirAccess::remove_file_or_error(tmp_path);
+ ERR_FAIL();
+ }
+ DirAccess::remove_file_or_error(tmp_path);
+ add_file(p_path + ".converted.res", data, true);
+}
+
+EditorExportTextSceneToBinaryPlugin::EditorExportTextSceneToBinaryPlugin() {
+ GLOBAL_DEF("editor/export/convert_text_resources_to_binary", false);
+}
diff --git a/editor/export/editor_export_plugin.h b/editor/export/editor_export_plugin.h
new file mode 100644
index 0000000000..04ebc1dfed
--- /dev/null
+++ b/editor/export/editor_export_plugin.h
@@ -0,0 +1,132 @@
+/*************************************************************************/
+/* editor_export_plugin.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef EDITOR_EXPORT_PLUGIN_H
+#define EDITOR_EXPORT_PLUGIN_H
+
+#include "core/extension/native_extension.h"
+#include "editor_export_preset.h"
+#include "editor_export_shared_object.h"
+
+class EditorExportPlugin : public RefCounted {
+ GDCLASS(EditorExportPlugin, RefCounted);
+
+ friend class EditorExportPlatform;
+
+ Ref<EditorExportPreset> export_preset;
+
+ Vector<SharedObject> shared_objects;
+ struct ExtraFile {
+ String path;
+ Vector<uint8_t> data;
+ bool remap = false;
+ };
+ Vector<ExtraFile> extra_files;
+ bool skipped = false;
+
+ Vector<String> ios_frameworks;
+ Vector<String> ios_embedded_frameworks;
+ Vector<String> ios_project_static_libs;
+ String ios_plist_content;
+ String ios_linker_flags;
+ Vector<String> ios_bundle_files;
+ String ios_cpp_code;
+
+ Vector<String> macos_plugin_files;
+
+ _FORCE_INLINE_ void _clear() {
+ shared_objects.clear();
+ extra_files.clear();
+ skipped = false;
+ }
+
+ _FORCE_INLINE_ void _export_end() {
+ ios_frameworks.clear();
+ ios_embedded_frameworks.clear();
+ ios_bundle_files.clear();
+ ios_plist_content = "";
+ ios_linker_flags = "";
+ ios_cpp_code = "";
+ macos_plugin_files.clear();
+ }
+
+ void _export_file_script(const String &p_path, const String &p_type, const Vector<String> &p_features);
+ void _export_begin_script(const Vector<String> &p_features, bool p_debug, const String &p_path, int p_flags);
+ void _export_end_script();
+
+protected:
+ void set_export_preset(const Ref<EditorExportPreset> &p_preset);
+ Ref<EditorExportPreset> get_export_preset() const;
+
+ void add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap);
+ void add_shared_object(const String &p_path, const Vector<String> &tags, const String &p_target = String());
+
+ void add_ios_framework(const String &p_path);
+ void add_ios_embedded_framework(const String &p_path);
+ void add_ios_project_static_lib(const String &p_path);
+ void add_ios_plist_content(const String &p_plist_content);
+ void add_ios_linker_flags(const String &p_flags);
+ void add_ios_bundle_file(const String &p_path);
+ void add_ios_cpp_code(const String &p_code);
+ void add_macos_plugin_file(const String &p_path);
+
+ void skip();
+
+ virtual void _export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features);
+ virtual void _export_begin(const HashSet<String> &p_features, bool p_debug, const String &p_path, int p_flags);
+
+ static void _bind_methods();
+
+ GDVIRTUAL3(_export_file, String, String, Vector<String>)
+ GDVIRTUAL4(_export_begin, Vector<String>, bool, String, uint32_t)
+ GDVIRTUAL0(_export_end)
+
+public:
+ Vector<String> get_ios_frameworks() const;
+ Vector<String> get_ios_embedded_frameworks() const;
+ Vector<String> get_ios_project_static_libs() const;
+ String get_ios_plist_content() const;
+ String get_ios_linker_flags() const;
+ Vector<String> get_ios_bundle_files() const;
+ String get_ios_cpp_code() const;
+ const Vector<String> &get_macos_plugin_files() const;
+
+ EditorExportPlugin();
+};
+
+class EditorExportTextSceneToBinaryPlugin : public EditorExportPlugin {
+ GDCLASS(EditorExportTextSceneToBinaryPlugin, EditorExportPlugin);
+
+public:
+ virtual void _export_file(const String &p_path, const String &p_type, const HashSet<String> &p_features) override;
+ EditorExportTextSceneToBinaryPlugin();
+};
+
+#endif // EDITOR_EXPORT_PLUGIN_H
diff --git a/editor/export/editor_export_preset.cpp b/editor/export/editor_export_preset.cpp
new file mode 100644
index 0000000000..cdf69e727d
--- /dev/null
+++ b/editor/export/editor_export_preset.cpp
@@ -0,0 +1,221 @@
+/*************************************************************************/
+/* editor_export_preset.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "editor_export.h"
+
+bool EditorExportPreset::_set(const StringName &p_name, const Variant &p_value) {
+ if (values.has(p_name)) {
+ values[p_name] = p_value;
+ EditorExport::singleton->save_presets();
+ return true;
+ }
+
+ return false;
+}
+
+bool EditorExportPreset::_get(const StringName &p_name, Variant &r_ret) const {
+ if (values.has(p_name)) {
+ r_ret = values[p_name];
+ return true;
+ }
+
+ return false;
+}
+
+void EditorExportPreset::_get_property_list(List<PropertyInfo> *p_list) const {
+ for (const PropertyInfo &E : properties) {
+ if (platform->get_export_option_visibility(E.name, values)) {
+ p_list->push_back(E);
+ }
+ }
+}
+
+Ref<EditorExportPlatform> EditorExportPreset::get_platform() const {
+ return platform;
+}
+
+void EditorExportPreset::update_files_to_export() {
+ Vector<String> to_remove;
+ for (const String &E : selected_files) {
+ if (!FileAccess::exists(E)) {
+ to_remove.push_back(E);
+ }
+ }
+ for (int i = 0; i < to_remove.size(); ++i) {
+ selected_files.erase(to_remove[i]);
+ }
+}
+
+Vector<String> EditorExportPreset::get_files_to_export() const {
+ Vector<String> files;
+ for (const String &E : selected_files) {
+ files.push_back(E);
+ }
+ return files;
+}
+
+void EditorExportPreset::set_name(const String &p_name) {
+ name = p_name;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_name() const {
+ return name;
+}
+
+void EditorExportPreset::set_runnable(bool p_enable) {
+ runnable = p_enable;
+ EditorExport::singleton->save_presets();
+}
+
+bool EditorExportPreset::is_runnable() const {
+ return runnable;
+}
+
+void EditorExportPreset::set_export_filter(ExportFilter p_filter) {
+ export_filter = p_filter;
+ EditorExport::singleton->save_presets();
+}
+
+EditorExportPreset::ExportFilter EditorExportPreset::get_export_filter() const {
+ return export_filter;
+}
+
+void EditorExportPreset::set_include_filter(const String &p_include) {
+ include_filter = p_include;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_include_filter() const {
+ return include_filter;
+}
+
+void EditorExportPreset::set_export_path(const String &p_path) {
+ export_path = p_path;
+ /* NOTE(SonerSound): if there is a need to implement a PropertyHint that specifically indicates a relative path,
+ * this should be removed. */
+ if (export_path.is_absolute_path()) {
+ String res_path = OS::get_singleton()->get_resource_dir();
+ export_path = res_path.path_to_file(export_path);
+ }
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_export_path() const {
+ return export_path;
+}
+
+void EditorExportPreset::set_exclude_filter(const String &p_exclude) {
+ exclude_filter = p_exclude;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_exclude_filter() const {
+ return exclude_filter;
+}
+
+void EditorExportPreset::add_export_file(const String &p_path) {
+ selected_files.insert(p_path);
+ EditorExport::singleton->save_presets();
+}
+
+void EditorExportPreset::remove_export_file(const String &p_path) {
+ selected_files.erase(p_path);
+ EditorExport::singleton->save_presets();
+}
+
+bool EditorExportPreset::has_export_file(const String &p_path) {
+ return selected_files.has(p_path);
+}
+
+void EditorExportPreset::set_custom_features(const String &p_custom_features) {
+ custom_features = p_custom_features;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_custom_features() const {
+ return custom_features;
+}
+
+void EditorExportPreset::set_enc_in_filter(const String &p_filter) {
+ enc_in_filters = p_filter;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_enc_in_filter() const {
+ return enc_in_filters;
+}
+
+void EditorExportPreset::set_enc_ex_filter(const String &p_filter) {
+ enc_ex_filters = p_filter;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_enc_ex_filter() const {
+ return enc_ex_filters;
+}
+
+void EditorExportPreset::set_enc_pck(bool p_enabled) {
+ enc_pck = p_enabled;
+ EditorExport::singleton->save_presets();
+}
+
+bool EditorExportPreset::get_enc_pck() const {
+ return enc_pck;
+}
+
+void EditorExportPreset::set_enc_directory(bool p_enabled) {
+ enc_directory = p_enabled;
+ EditorExport::singleton->save_presets();
+}
+
+bool EditorExportPreset::get_enc_directory() const {
+ return enc_directory;
+}
+
+void EditorExportPreset::set_script_export_mode(int p_mode) {
+ script_mode = p_mode;
+ EditorExport::singleton->save_presets();
+}
+
+int EditorExportPreset::get_script_export_mode() const {
+ return script_mode;
+}
+
+void EditorExportPreset::set_script_encryption_key(const String &p_key) {
+ script_key = p_key;
+ EditorExport::singleton->save_presets();
+}
+
+String EditorExportPreset::get_script_encryption_key() const {
+ return script_key;
+}
+
+EditorExportPreset::EditorExportPreset() {}
diff --git a/editor/export/editor_export_preset.h b/editor/export/editor_export_preset.h
new file mode 100644
index 0000000000..00109396b0
--- /dev/null
+++ b/editor/export/editor_export_preset.h
@@ -0,0 +1,145 @@
+/*************************************************************************/
+/* editor_export_preset.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef EDITOR_EXPORT_PRESET_H
+#define EDITOR_EXPORT_PRESET_H
+
+class EditorExportPlatform;
+
+#include "core/object/ref_counted.h"
+
+class EditorExportPreset : public RefCounted {
+ GDCLASS(EditorExportPreset, RefCounted);
+
+public:
+ enum ExportFilter {
+ EXPORT_ALL_RESOURCES,
+ EXPORT_SELECTED_SCENES,
+ EXPORT_SELECTED_RESOURCES,
+ EXCLUDE_SELECTED_RESOURCES,
+ };
+
+ enum ScriptExportMode {
+ MODE_SCRIPT_TEXT,
+ MODE_SCRIPT_COMPILED,
+ };
+
+private:
+ Ref<EditorExportPlatform> platform;
+ ExportFilter export_filter = EXPORT_ALL_RESOURCES;
+ String include_filter;
+ String exclude_filter;
+ String export_path;
+
+ String exporter;
+ HashSet<String> selected_files;
+ bool runnable = false;
+
+ friend class EditorExport;
+ friend class EditorExportPlatform;
+
+ List<PropertyInfo> properties;
+ HashMap<StringName, Variant> values;
+
+ String name;
+
+ String custom_features;
+
+ String enc_in_filters;
+ String enc_ex_filters;
+ bool enc_pck = false;
+ bool enc_directory = false;
+
+ int script_mode = MODE_SCRIPT_COMPILED;
+ String script_key;
+
+protected:
+ bool _set(const StringName &p_name, const Variant &p_value);
+ bool _get(const StringName &p_name, Variant &r_ret) const;
+ void _get_property_list(List<PropertyInfo> *p_list) const;
+
+public:
+ Ref<EditorExportPlatform> get_platform() const;
+
+ bool has(const StringName &p_property) const { return values.has(p_property); }
+
+ void update_files_to_export();
+
+ Vector<String> get_files_to_export() const;
+
+ void add_export_file(const String &p_path);
+ void remove_export_file(const String &p_path);
+ bool has_export_file(const String &p_path);
+
+ void set_name(const String &p_name);
+ String get_name() const;
+
+ void set_runnable(bool p_enable);
+ bool is_runnable() const;
+
+ void set_export_filter(ExportFilter p_filter);
+ ExportFilter get_export_filter() const;
+
+ void set_include_filter(const String &p_include);
+ String get_include_filter() const;
+
+ void set_exclude_filter(const String &p_exclude);
+ String get_exclude_filter() const;
+
+ void set_custom_features(const String &p_custom_features);
+ String get_custom_features() const;
+
+ void set_export_path(const String &p_path);
+ String get_export_path() const;
+
+ void set_enc_in_filter(const String &p_filter);
+ String get_enc_in_filter() const;
+
+ void set_enc_ex_filter(const String &p_filter);
+ String get_enc_ex_filter() const;
+
+ void set_enc_pck(bool p_enabled);
+ bool get_enc_pck() const;
+
+ void set_enc_directory(bool p_enabled);
+ bool get_enc_directory() const;
+
+ void set_script_export_mode(int p_mode);
+ int get_script_export_mode() const;
+
+ void set_script_encryption_key(const String &p_key);
+ String get_script_encryption_key() const;
+
+ const List<PropertyInfo> &get_properties() const { return properties; }
+
+ EditorExportPreset();
+};
+
+#endif // EDITOR_EXPORT_PRESET_H
diff --git a/editor/export/editor_export_shared_object.h b/editor/export/editor_export_shared_object.h
new file mode 100644
index 0000000000..558f403ca1
--- /dev/null
+++ b/editor/export/editor_export_shared_object.h
@@ -0,0 +1,51 @@
+/*************************************************************************/
+/* editor_export_shared_object.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef EDITOR_EXPORT_SHARED_OBJECT_H
+#define EDITOR_EXPORT_SHARED_OBJECT_H
+
+#include "core/string/ustring.h"
+#include "core/templates/vector.h"
+
+struct SharedObject {
+ String path;
+ Vector<String> tags;
+ String target;
+
+ SharedObject(const String &p_path, const Vector<String> &p_tags, const String &p_target) :
+ path(p_path),
+ tags(p_tags),
+ target(p_target) {
+ }
+
+ SharedObject() {}
+};
+
+#endif // EDITOR_EXPORT_SHARED_OBJECT_H
diff --git a/editor/export_template_manager.cpp b/editor/export/export_template_manager.cpp
index 9f9b8374ce..e02066e956 100644
--- a/editor/export_template_manager.cpp
+++ b/editor/export/export_template_manager.cpp
@@ -30,18 +30,17 @@
#include "export_template_manager.h"
-#include "core/input/input.h"
#include "core/io/dir_access.h"
#include "core/io/json.h"
#include "core/io/zip_io.h"
-#include "core/os/keyboard.h"
-#include "core/templates/rb_set.h"
#include "core/version.h"
#include "editor/editor_node.h"
#include "editor/editor_paths.h"
#include "editor/editor_scale.h"
-#include "progress_dialog.h"
-#include "scene/gui/link_button.h"
+#include "editor/progress_dialog.h"
+#include "scene/gui/file_dialog.h"
+#include "scene/gui/tree.h"
+#include "scene/main/http_request.h"
void ExportTemplateManager::_update_template_status() {
// Fetch installed templates from the file system.
diff --git a/editor/export_template_manager.h b/editor/export/export_template_manager.h
index 3494e11d5e..f01da15832 100644
--- a/editor/export_template_manager.h
+++ b/editor/export/export_template_manager.h
@@ -31,15 +31,15 @@
#ifndef EXPORT_TEMPLATE_MANAGER_H
#define EXPORT_TEMPLATE_MANAGER_H
-#include "editor/editor_settings.h"
#include "scene/gui/dialogs.h"
-#include "scene/gui/file_dialog.h"
-#include "scene/gui/menu_button.h"
-#include "scene/gui/progress_bar.h"
-#include "scene/gui/scroll_container.h"
-#include "scene/main/http_request.h"
class ExportTemplateVersion;
+class FileDialog;
+class HTTPRequest;
+class MenuButton;
+class OptionButton;
+class ProgressBar;
+class Tree;
class ExportTemplateManager : public AcceptDialog {
GDCLASS(ExportTemplateManager, AcceptDialog);
diff --git a/editor/project_export.cpp b/editor/export/project_export.cpp
index 209c997d58..a20f19efc8 100644
--- a/editor/project_export.cpp
+++ b/editor/export/project_export.cpp
@@ -31,23 +31,15 @@
#include "project_export.h"
#include "core/config/project_settings.h"
-#include "core/io/dir_access.h"
-#include "core/io/file_access.h"
-#include "core/io/image_loader.h"
-#include "core/io/resource_loader.h"
-#include "core/io/resource_saver.h"
-#include "core/os/os.h"
-#include "core/string/optimized_translation.h"
-#include "core/version_generated.gen.h"
+#include "core/version.h"
#include "editor/editor_file_dialog.h"
+#include "editor/editor_file_system.h"
#include "editor/editor_node.h"
+#include "editor/editor_properties.h"
#include "editor/editor_scale.h"
-#include "editor/editor_settings.h"
-#include "scene/gui/box_container.h"
-#include "scene/gui/margin_container.h"
-#include "scene/gui/scroll_container.h"
-#include "scene/gui/tab_container.h"
-#include "servers/display_server.h"
+#include "editor/export/editor_export.h"
+#include "scene/gui/link_button.h"
+#include "scene/gui/tree.h"
void ProjectExportDialog::_theme_changed() {
duplicate_preset->set_icon(presets->get_theme_icon(SNAME("Duplicate"), SNAME("EditorIcons")));
diff --git a/editor/project_export.h b/editor/export/project_export.h
index 5503d5aa47..96dd765a2c 100644
--- a/editor/project_export.h
+++ b/editor/export/project_export.h
@@ -31,28 +31,22 @@
#ifndef PROJECT_EXPORT_H
#define PROJECT_EXPORT_H
-#include "core/io/dir_access.h"
-#include "core/os/thread.h"
-#include "editor/editor_export.h"
-#include "editor/editor_file_system.h"
-#include "editor/editor_inspector.h"
-#include "editor/editor_properties.h"
-#include "scene/gui/button.h"
-#include "scene/gui/check_button.h"
-#include "scene/gui/control.h"
#include "scene/gui/dialogs.h"
-#include "scene/gui/file_dialog.h"
-#include "scene/gui/label.h"
-#include "scene/gui/link_button.h"
-#include "scene/gui/menu_button.h"
-#include "scene/gui/option_button.h"
-#include "scene/gui/rich_text_label.h"
-#include "scene/gui/slider.h"
-#include "scene/gui/tab_container.h"
-#include "scene/gui/tree.h"
-#include "scene/main/timer.h"
+class CheckBox;
+class CheckButton;
+class EditorExportPreset;
class EditorFileDialog;
+class EditorFileSystemDirectory;
+class EditorInspector;
+class EditorPropertyPath;
+class ItemList;
+class MenuButton;
+class OptionButton;
+class RichTextLabel;
+class TabContainer;
+class Tree;
+class TreeItem;
class ProjectExportDialog : public ConfirmationDialog {
GDCLASS(ProjectExportDialog, ConfirmationDialog);
diff --git a/editor/icons/FontFile.svg b/editor/icons/FontFile.svg
index 4b94fd0d74..c014299783 100644
--- a/editor/icons/FontFile.svg
+++ b/editor/icons/FontFile.svg
@@ -1 +1 @@
-<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.5 1v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V3h2a1 1 0 0 1 1 1h1V1h-6Z" fill="#e0e0e0"/><path d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5h-6Z" fill="#ff5f5f"/></svg>
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 7.5h-1a.519.519 0 0 0-.281.084A.491.491 0 0 0 6 8v.5h-.5V9a1 1 0 0 1-1 1v1H8V9.854A1 1 0 0 1 7.5 9V7.5zM1.5 1v3h1a1 1 0 0 1 1-1h2v1.5h2V3h2a1 1 0 0 1 1 1h1V1h-10z" style="fill:#e0e0e0;fill-opacity:1"/><path d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5h-6z" fill="#ff5f5f"/></svg>
diff --git a/editor/icons/FontVariation.svg b/editor/icons/FontVariation.svg
index eaad049fce..39917bcba9 100644
--- a/editor/icons/FontVariation.svg
+++ b/editor/icons/FontVariation.svg
@@ -1 +1 @@
-<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M2.437 1 1.379 4h1A.84 1.192 50 0 1 3.73 3h2L3.615 9a.84 1.192 50 0 1-1.352 1l-.353 1h4l.353-1a.84 1.192 50 0 1-.648-1l2.116-6h2a.84 1.192 50 0 1 .648 1h1l1.058-3h-6Z" fill="#e0e0e0"/><path d="m4.621 5-.705 2-.353 1h1a.84 1.192 49.998 0 1 1.353-1h2L5.8 13a.84 1.192 49.998 0 1-1.353 1l-.353 1h4l.353-1a.84 1.192 49.998 0 1-.647-1l2.116-6h2a.84 1.192 49.998 0 1 .647 1h1l.353-1 .705-2h-6Z" fill="#ff5f5f"/></svg>
+<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M5.975 11 7.21 7.5H5.916a.478.478 0 0 0-.113.016.837.837 0 0 0-.127.043c-.044.018-.089.04-.133.066l-.043.027V9a1 1 0 0 1-1 1v1h1.475zM1.5 1v3h1a1 1 0 0 1 1-1h2v1.5h2V3h2a1 1 0 0 1 1 1h1V1h-10z" style="fill:#e0e0e0;fill-opacity:1"/><path d="m4.621 5-.705 2-.353 1h1a.84 1.192 49.998 0 1 1.353-1h2L5.8 13a.84 1.192 49.998 0 1-1.353 1l-.353 1h4l.353-1a.84 1.192 49.998 0 1-.647-1l2.116-6h2a.84 1.192 49.998 0 1 .647 1h1l.353-1 .705-2h-6z" fill="#ff5f5f"/></svg>
diff --git a/editor/icons/SystemFont.svg b/editor/icons/SystemFont.svg
new file mode 100644
index 0000000000..a6f62d56d3
--- /dev/null
+++ b/editor/icons/SystemFont.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path style="fill:#e0e0e0;fill-opacity:1;stroke-width:.714755" d="m5.787 1-.402 1.613c-.352.265-.71.122-1.012-.111l-.904-.541L2.46 2.973l.853 1.425c-.058.438-.412.586-.79.635-.343.065-.674.216-1.024.213V6.72c.367 0 .715.157 1.074.224.371.032.716.243.727.65l-.84 1.4 1.008 1.01c.443-.266.895-.53 1.33-.802.349-.044.675.139.674.506l.314 1.258c.459-.059 1.099.115 1.45-.082.117-.475.242-.954.35-1.428A.67.67 0 0 1 8 9.195V7.5H6.5a.519.519 0 0 0-.281.084A.491.491 0 0 0 6 8v.5H4v-4h5.75c-.005-.22.107-.434.254-.625l.543-.902L9.535 1.96l-1.426.853c-.437-.058-.588-.412-.636-.79L7.217 1h-1.43z"/><path d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5h-6z" fill="#ff5f5f"/></svg>
diff --git a/editor/plugins/font_config_plugin.cpp b/editor/plugins/font_config_plugin.cpp
index 848fb5887d..a7b0f8b148 100644
--- a/editor/plugins/font_config_plugin.cpp
+++ b/editor/plugins/font_config_plugin.cpp
@@ -895,17 +895,45 @@ void FontPreview::_notification(int p_what) {
Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
Color text_color = get_theme_color(SNAME("font_color"), SNAME("Label"));
- font->draw_string(get_canvas_item(), Point2(0, font->get_height(font_size) + 2 * EDSCALE), name, HORIZONTAL_ALIGNMENT_CENTER, get_size().x, font_size, text_color);
// Draw font preview.
- Vector2 pos = Vector2(0, font->get_height(font_size)) + (get_size() - Vector2(0, font->get_height(font_size)) - line->get_size()) / 2;
- line->draw(get_canvas_item(), pos, text_color);
-
- // Draw font baseline.
- Color line_color = text_color;
- line_color.a *= 0.6;
- draw_line(Vector2(0, pos.y + line->get_line_ascent()), Vector2(pos.x - 5, pos.y + line->get_line_ascent()), line_color);
- draw_line(Vector2(pos.x + line->get_size().x + 5, pos.y + line->get_line_ascent()), Vector2(get_size().x, pos.y + line->get_line_ascent()), line_color);
+ bool prev_ok = true;
+ if (prev_font.is_valid()) {
+ if (prev_font->get_font_name().is_empty()) {
+ prev_ok = false;
+ } else {
+ String name;
+ if (prev_font->get_font_style_name().is_empty()) {
+ name = prev_font->get_font_name();
+ } else {
+ name = vformat("%s (%s)", prev_font->get_font_name(), prev_font->get_font_style_name());
+ }
+ if (prev_font->is_class("FontVariation")) {
+ name += " " + TTR(" - Variation");
+ }
+ font->draw_string(get_canvas_item(), Point2(0, font->get_height(font_size) + 2 * EDSCALE), name, HORIZONTAL_ALIGNMENT_CENTER, get_size().x, font_size, text_color);
+
+ String sample;
+ static const String sample_base = U"12漢字ԱբΑαÐбΑα×בابÜÜ’Þ€Þआআਆઆଆஆఆಆആආà¸à¸´àºàº´à¼€á€€á‚ áƒí•œê¸€áˆ€áŽ£áášáš áœ€áœ á€á áž€á  á¤á¥Ab😀";
+ for (int i = 0; i < sample_base.length(); i++) {
+ if (prev_font->has_char(sample_base[i])) {
+ sample += sample_base[i];
+ }
+ }
+ if (sample.is_empty()) {
+ sample = prev_font->get_supported_chars().substr(0, 6);
+ }
+ if (sample.is_empty()) {
+ prev_ok = false;
+ } else {
+ prev_font->draw_string(get_canvas_item(), Point2(0, font->get_height(font_size) + prev_font->get_height(50)), sample, HORIZONTAL_ALIGNMENT_CENTER, get_size().x, 50, text_color);
+ }
+ }
+ }
+ if (!prev_ok) {
+ text_color.a *= 0.5;
+ font->draw_string(get_canvas_item(), Point2(0, font->get_height(font_size) + 2 * EDSCALE), TTR("Unable to preview font"), HORIZONTAL_ALIGNMENT_CENTER, get_size().x, font_size, text_color);
+ }
} break;
}
}
@@ -917,30 +945,11 @@ Size2 FontPreview::get_minimum_size() const {
}
void FontPreview::set_data(const Ref<Font> &p_f) {
- line->clear();
- if (p_f.is_valid()) {
- name = vformat("%s (%s)", p_f->get_font_name(), p_f->get_font_style_name());
- if (p_f->is_class("FontVariation")) {
- name += " " + TTR(" - Variation");
- }
- String sample;
- static const String sample_base = U"12漢字ԱբΑαÐбΑα×בابÜÜ’Þ€Þआআਆઆଆஆఆಆആආà¸à¸´àºàº´à¼€á€€á‚ áƒí•œê¸€áˆ€áŽ£áášáš áœ€áœ á€á áž€á  á¤á¥Ab😀";
- for (int i = 0; i < sample_base.length(); i++) {
- if (p_f->has_char(sample_base[i])) {
- sample += sample_base[i];
- }
- }
- if (sample.is_empty()) {
- sample = p_f->get_supported_chars().substr(0, 6);
- }
- line->add_string(sample, p_f, 50);
- }
-
+ prev_font = p_f;
update();
}
FontPreview::FontPreview() {
- line.instantiate();
}
/*************************************************************************/
@@ -965,6 +974,71 @@ bool EditorInspectorPluginFontPreview::parse_property(Object *p_object, const Va
}
/*************************************************************************/
+/* EditorPropertyFontNamesArray */
+/*************************************************************************/
+
+void EditorPropertyFontNamesArray::_add_element() {
+ Size2 size = get_size();
+ menu->set_position(get_screen_position() + Size2(0, size.height * get_global_transform().get_scale().y));
+ menu->reset_size();
+ menu->popup();
+}
+
+void EditorPropertyFontNamesArray::_add_font(int p_option) {
+ if (updating) {
+ return;
+ }
+
+ Variant array = object->get_array();
+ int previous_size = array.call("size");
+
+ array.call("resize", previous_size + 1);
+ array.set(previous_size, menu->get_item_text(p_option));
+
+ emit_changed(get_edited_property(), array, "", false);
+ object->set_array(array);
+ update_property();
+}
+
+EditorPropertyFontNamesArray::EditorPropertyFontNamesArray() {
+ menu = memnew(PopupMenu);
+ menu->add_item("Sans-Serif", 0);
+ menu->add_item("Serif", 1);
+ menu->add_item("Monospace", 2);
+ menu->add_item("Fantasy", 3);
+ menu->add_item("Cursive", 4);
+
+ menu->add_separator();
+
+ if (OS::get_singleton()) {
+ Vector<String> fonts = OS::get_singleton()->get_system_fonts();
+ for (int i = 0; i < fonts.size(); i++) {
+ menu->add_item(fonts[i], i + 6);
+ }
+ }
+ add_child(menu);
+ menu->connect("id_pressed", callable_mp(this, &EditorPropertyFontNamesArray::_add_font));
+}
+
+/*************************************************************************/
+/* EditorInspectorPluginSystemFont */
+/*************************************************************************/
+
+bool EditorInspectorPluginSystemFont::can_handle(Object *p_object) {
+ return Object::cast_to<SystemFont>(p_object) != nullptr;
+}
+
+bool EditorInspectorPluginSystemFont::parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) {
+ if (p_path == "font_names") {
+ EditorPropertyFontNamesArray *editor = memnew(EditorPropertyFontNamesArray);
+ editor->setup(p_type, p_hint_text);
+ add_property_editor(p_path, editor);
+ return true;
+ }
+ return false;
+}
+
+/*************************************************************************/
/* FontEditorPlugin */
/*************************************************************************/
@@ -973,6 +1047,10 @@ FontEditorPlugin::FontEditorPlugin() {
fc_plugin.instantiate();
EditorInspector::add_inspector_plugin(fc_plugin);
+ Ref<EditorInspectorPluginSystemFont> fs_plugin;
+ fs_plugin.instantiate();
+ EditorInspector::add_inspector_plugin(fs_plugin);
+
Ref<EditorInspectorPluginFontPreview> fp_plugin;
fp_plugin.instantiate();
EditorInspector::add_inspector_plugin(fp_plugin);
diff --git a/editor/plugins/font_config_plugin.h b/editor/plugins/font_config_plugin.h
index 67c16bfe60..3eaa2fdc17 100644
--- a/editor/plugins/font_config_plugin.h
+++ b/editor/plugins/font_config_plugin.h
@@ -34,6 +34,7 @@
#include "core/io/marshalls.h"
#include "editor/editor_plugin.h"
#include "editor/editor_properties.h"
+#include "editor/editor_properties_array_dict.h"
/*************************************************************************/
@@ -225,8 +226,7 @@ protected:
void _notification(int p_what);
static void _bind_methods();
- String name;
- Ref<TextLine> line;
+ Ref<Font> prev_font;
public:
virtual Size2 get_minimum_size() const override;
@@ -249,6 +249,33 @@ public:
/*************************************************************************/
+class EditorPropertyFontNamesArray : public EditorPropertyArray {
+ GDCLASS(EditorPropertyFontNamesArray, EditorPropertyArray);
+
+ PopupMenu *menu = nullptr;
+
+protected:
+ virtual void _add_element() override;
+
+ void _add_font(int p_option);
+ static void _bind_methods(){};
+
+public:
+ EditorPropertyFontNamesArray();
+};
+
+/*************************************************************************/
+
+class EditorInspectorPluginSystemFont : public EditorInspectorPlugin {
+ GDCLASS(EditorInspectorPluginSystemFont, EditorInspectorPlugin);
+
+public:
+ virtual bool can_handle(Object *p_object) override;
+ virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false) override;
+};
+
+/*************************************************************************/
+
class FontEditorPlugin : public EditorPlugin {
GDCLASS(FontEditorPlugin, EditorPlugin);
diff --git a/editor/plugins/gdextension_export_plugin.h b/editor/plugins/gdextension_export_plugin.h
index b91a17d9e5..b5eca46ad3 100644
--- a/editor/plugins/gdextension_export_plugin.h
+++ b/editor/plugins/gdextension_export_plugin.h
@@ -31,7 +31,7 @@
#ifndef GDEXTENSION_EXPORT_PLUGIN_H
#define GDEXTENSION_EXPORT_PLUGIN_H
-#include "editor/editor_export.h"
+#include "editor/export/editor_export.h"
class GDExtensionExportPlugin : public EditorExportPlugin {
protected:
diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp
index 34db75f118..e21cb7e76a 100644
--- a/editor/plugins/material_editor_plugin.cpp
+++ b/editor/plugins/material_editor_plugin.cpp
@@ -155,7 +155,9 @@ MaterialEditor::MaterialEditor() {
camera = memnew(Camera3D);
camera->set_transform(Transform3D(Basis(), Vector3(0, 0, 3)));
- camera->set_perspective(45, 0.1, 10);
+ // Use low field of view so the sphere/box is fully encompassed within the preview,
+ // without much distortion.
+ camera->set_perspective(20, 0.1, 10);
camera->make_current();
viewport->add_child(camera);
@@ -177,8 +179,8 @@ MaterialEditor::MaterialEditor() {
Transform3D box_xform;
box_xform.basis.rotate(Vector3(1, 0, 0), Math::deg2rad(25.0));
box_xform.basis = box_xform.basis * Basis().rotated(Vector3(0, 1, 0), Math::deg2rad(-25.0));
- box_xform.basis.scale(Vector3(0.8, 0.8, 0.8));
- box_xform.origin.y = 0.2;
+ box_xform.basis.scale(Vector3(0.7, 0.7, 0.7));
+ box_xform.origin.y = 0.05;
box_instance->set_transform(box_xform);
sphere_mesh.instantiate();
diff --git a/editor/plugins/tiles/tiles_editor_plugin.cpp b/editor/plugins/tiles/tiles_editor_plugin.cpp
index 419d0ffcfc..97553578ba 100644
--- a/editor/plugins/tiles/tiles_editor_plugin.cpp
+++ b/editor/plugins/tiles/tiles_editor_plugin.cpp
@@ -226,14 +226,14 @@ void TilesEditorPlugin::synchronize_sources_list(Object *p_current_list, Object
}
if (item_list->is_visible_in_tree()) {
+ // Make sure the selection is not overwritten after sorting.
+ int atlas_sources_lists_current_mem = atlas_sources_lists_current;
+ item_list->emit_signal(SNAME("sort_request"));
+ atlas_sources_lists_current = atlas_sources_lists_current_mem;
+
if (atlas_sources_lists_current < 0 || atlas_sources_lists_current >= item_list->get_item_count()) {
item_list->deselect_all();
} else {
- // Make sure the selection is not overwritten after sorting.
- int atlas_sources_lists_current_mem = atlas_sources_lists_current;
- item_list->emit_signal(SNAME("sort_request"));
- atlas_sources_lists_current = atlas_sources_lists_current_mem;
-
item_list->set_current(atlas_sources_lists_current);
item_list->ensure_current_is_visible();
item_list->emit_signal(SNAME("item_selected"), atlas_sources_lists_current);
diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp
index 49707355a0..077dfc60c0 100644
--- a/editor/project_settings_editor.cpp
+++ b/editor/project_settings_editor.cpp
@@ -31,7 +31,6 @@
#include "project_settings_editor.h"
#include "core/config/project_settings.h"
-#include "editor/editor_export.h"
#include "editor/editor_log.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index 488a084903..86b6e4c6a5 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -43,7 +43,6 @@
#include "editor/array_property_edit.h"
#include "editor/create_dialog.h"
#include "editor/dictionary_property_edit.h"
-#include "editor/editor_export.h"
#include "editor/editor_file_dialog.h"
#include "editor/editor_file_system.h"
#include "editor/editor_help.h"
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 8cf0f50db8..ca1771bedf 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -1337,14 +1337,14 @@ void SceneTreeDock::_node_replace_owner(Node *p_base, Node *p_node, Node *p_root
UndoRedo *undo_redo = &editor_data->get_undo_redo();
switch (p_mode) {
case MODE_BIDI: {
- bool is_unique = p_node->is_unique_name_in_owner() && p_base->get_node_or_null(UNIQUE_NODE_PREFIX + String(p_node->get_name())) != nullptr;
- if (is_unique) {
+ bool disable_unique = p_node->is_unique_name_in_owner() && p_root->get_node_or_null(UNIQUE_NODE_PREFIX + String(p_node->get_name())) != nullptr;
+ if (disable_unique) {
// Will create a unique name conflict. Disable before setting owner.
undo_redo->add_do_method(p_node, "set_unique_name_in_owner", false);
}
undo_redo->add_do_method(p_node, "set_owner", p_root);
undo_redo->add_undo_method(p_node, "set_owner", p_base);
- if (is_unique) {
+ if (disable_unique) {
// Will create a unique name conflict. Enable after setting owner.
undo_redo->add_undo_method(p_node, "set_unique_name_in_owner", true);
}
diff --git a/editor/translations/af.po b/editor/translations/af.po
index 78dd7f2140..55fe58e1b0 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -2191,14 +2191,15 @@ msgstr "Gunstelinge:"
msgid "Recent:"
msgstr "Onlangse:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Soek:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Passendes:"
@@ -2260,8 +2261,8 @@ msgstr "Soek Vervanging Hulpbron:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5570,6 +5571,10 @@ msgid "Drag And Drop Selection"
msgstr "Alle Seleksie"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11868,6 +11873,11 @@ msgid "New Animation"
msgstr "Optimaliseer Animasie"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Eienskappe"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index 87266564f8..36e71f130e 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -66,13 +66,15 @@
# Abderrahim <abdoudido117@gmail.com>, 2022.
# Jhon Smith <jhonsmaith3@gmail.com>, 2022.
# Oo mohab oO <mohab9225@gmail.com>, 2022.
+# عبد الرحمن أبو سعدة ||Abd Alrahman abo saada <abdalrahmanabs2005@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-09 21:11+0000\n"
-"Last-Translator: Oo mohab oO <mohab9225@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: عبد الرحمن أبو سعدة ||Abd Alrahman abo saada "
+"<abdalrahmanabs2005@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -81,7 +83,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -452,7 +454,7 @@ msgstr "Ù…ÙØªØ§Ø­ Command"
#: core/os/input_event.cpp
#, fuzzy
msgid "Physical"
-msgstr " (Ùيزيائي)"
+msgstr "(Ùيزيائي)"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
@@ -486,7 +488,7 @@ msgstr "الموقع العالمي"
#: core/os/input_event.cpp
msgid "Factor"
-msgstr "المعامل"
+msgstr "العامل"
#: core/os/input_event.cpp
msgid "Button Index"
@@ -553,7 +555,7 @@ msgstr "قناة"
#: core/os/input_event.cpp main/main.cpp
msgid "Message"
-msgstr "الرسالة"
+msgstr "رسالة"
#: core/os/input_event.cpp
msgid "Pitch"
@@ -585,7 +587,7 @@ msgstr "التطبيق"
#: core/project_settings.cpp main/main.cpp
msgid "Config"
-msgstr "تعديل"
+msgstr "إعداد"
#: core/project_settings.cpp
msgid "Project Settings Override"
@@ -602,7 +604,7 @@ msgstr "تجاوز إعدادات المشروع"
#: scene/3d/skeleton.cpp scene/main/node.cpp scene/resources/mesh_library.cpp
#: scene/resources/skin.cpp
msgid "Name"
-msgstr "الأسم"
+msgstr "الاسم"
#: core/project_settings.cpp editor/editor_help.cpp
#: modules/visual_script/visual_script_nodes.cpp platform/uwp/export/export.cpp
@@ -862,9 +864,8 @@ msgid "Compression"
msgstr "ضغط"
#: core/project_settings.cpp
-#, fuzzy
msgid "Formats"
-msgstr "البنية (اللاحقة)"
+msgstr "التنسيقات"
#: core/project_settings.cpp
#, fuzzy
@@ -944,7 +945,7 @@ msgstr "المسار"
#: core/script_language.cpp
msgid "Source Code"
-msgstr "مصدر الرمز"
+msgstr "الكود المصدري || Ø§Ù„Ø´ÙØ±Ø© المصدرية"
#: core/translation.cpp editor/project_settings_editor.cpp
msgid "Locale"
@@ -956,7 +957,7 @@ msgstr "إختبار"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr "تقهقر"
+msgstr "تراجع | انسحاب"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -1014,7 +1015,7 @@ msgstr "حجم Ùهرس المخزن المؤقت للوحة المضلعات (K
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
msgid "2D"
-msgstr "2D"
+msgstr "ثنائي الأبعاد"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -2177,14 +2178,15 @@ msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©:"
msgid "Recent:"
msgstr "الحالي:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "بحث:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "يطابق:"
@@ -2244,8 +2246,8 @@ msgstr "البحث عن مورد بديل:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -4868,7 +4870,7 @@ msgstr "نظام Ø§Ù„Ù…Ù„ÙØ§Øª"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr "توسيع التبويب السÙلي"
+msgstr "توسيع القائمة السÙلية"
#: editor/editor_node.cpp
msgid "Don't Save"
@@ -5608,6 +5610,10 @@ msgid "Drag And Drop Selection"
msgstr "تحديد الملئ خريطة-الشبكة"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "المظهر"
@@ -11847,6 +11853,11 @@ msgid "New Animation"
msgstr "رسومية متحركة جديدة"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "ترشيح الدوال"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "السرعة:"
@@ -16283,26 +16294,24 @@ msgid "Set Room Point Position"
msgstr "حدد موقع نقطة الإنحناء"
#: editor/spatial_editor_gizmos.cpp scene/3d/portal.cpp
-#, fuzzy
msgid "Portal Margin"
-msgstr "تحديد الهامش"
+msgstr "هامش البوابة"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Edge"
-msgstr ""
+msgstr "Ø­Ø§ÙØ© Ø§Ù„ØºØ±ÙØ©"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Arrow"
-msgstr ""
+msgstr "سهم البوابة"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "حدد موقع نقطة الإنحناء"
+msgstr "حدد موقع نقطة البوابة"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Front"
-msgstr ""
+msgstr "واجهة البوابة"
#: editor/spatial_editor_gizmos.cpp
#, fuzzy
@@ -16341,18 +16350,16 @@ msgid "Occluder Polygon Front"
msgstr "أنشئ شكل Ù…ÙØ·Ø¨Ù‚"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Polygon Back"
-msgstr "أنشئ شكل Ù…ÙØ·Ø¨Ù‚"
+msgstr ""
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Hole"
-msgstr "أنشئ شكل Ù…ÙØ·Ø¨Ù‚"
+msgstr ""
#: main/main.cpp
msgid "Godot Physics"
-msgstr ""
+msgstr "Ùيزيائيات جودو"
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
@@ -16431,9 +16438,8 @@ msgid "Driver"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Driver Name"
-msgstr "اسم النص البرمجي:"
+msgstr "اسم النص البرمجي"
#: main/main.cpp
msgid "Fallback To GLES2"
@@ -16452,22 +16458,20 @@ msgid "Allow hiDPI"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "V-Sync"
-msgstr "مزامنة"
+msgstr "مزامنة (مزامنة كرت الشاشة)"
#: main/main.cpp
-#, fuzzy
msgid "Use V-Sync"
-msgstr "استخدام المحاذاة"
+msgstr "استخدام مزامنة كرت الشاشة"
#: main/main.cpp
msgid "Per Pixel Transparency"
-msgstr ""
+msgstr "Ø´ÙØ§Ùية بيكسل القلم"
#: main/main.cpp
msgid "Allowed"
-msgstr ""
+msgstr "مسموح"
#: main/main.cpp
msgid "Intended Usage"
@@ -16479,18 +16483,16 @@ msgid "Framebuffer Allocation"
msgstr "تحديد الإطار"
#: main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Energy Saving"
-msgstr "خطأ ÙÙŠ Ø§Ù„Ø­ÙØ¸"
+msgstr "توÙير الطاقة"
#: main/main.cpp
msgid "Threads"
-msgstr ""
+msgstr "مسارات"
#: main/main.cpp servers/physics_2d/physics_2d_server_wrap_mt.h
-#, fuzzy
msgid "Thread Model"
-msgstr "أظهر المود"
+msgstr "نوع المسار"
#: main/main.cpp
msgid "Thread Safe BVH"
@@ -16508,9 +16510,8 @@ msgstr "الوثائق الإلكترونية"
#: main/main.cpp scene/gui/scroll_container.cpp scene/gui/text_edit.cpp
#: scene/main/scene_tree.cpp scene/register_scene_types.cpp
-#, fuzzy
msgid "Common"
-msgstr "المجتمع"
+msgstr "شائع"
#: main/main.cpp
#, fuzzy
@@ -16530,7 +16531,7 @@ msgstr ""
#: scene/gui/scroll_container.cpp scene/gui/text_edit.cpp scene/gui/tree.cpp
#: scene/main/viewport.cpp scene/register_scene_types.cpp
msgid "GUI"
-msgstr ""
+msgstr "واجهة المستخدم الرسومية"
#: main/main.cpp
msgid "Drop Mouse On GUI Input Disabled"
@@ -16554,9 +16555,8 @@ msgid "Physics Interpolation"
msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡"
#: main/main.cpp
-#, fuzzy
msgid "Enable Warnings"
-msgstr "تمكين الترشيح Filtering"
+msgstr "ØªÙØ¹ÙŠÙ„ التحذيرات"
#: main/main.cpp
#, fuzzy
@@ -16573,25 +16573,23 @@ msgstr ""
#: main/main.cpp
msgid "iOS"
-msgstr ""
+msgstr "IOS"
#: main/main.cpp
msgid "Hide Home Indicator"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Input Devices"
-msgstr "جميع الأجهزة"
+msgstr "أجهزة الإدخال"
#: main/main.cpp
-#, fuzzy
msgid "Pointing"
-msgstr "نقطة"
+msgstr "يشير"
#: main/main.cpp
msgid "Touch Delay"
-msgstr ""
+msgstr "تأخير اللمس"
#: main/main.cpp servers/visual_server.cpp
msgid "GLES3"
@@ -16633,7 +16631,7 @@ msgstr ""
#: main/main.cpp
msgid "Fullsize"
-msgstr ""
+msgstr "الحجم الكامل"
#: main/main.cpp scene/resources/dynamic_font.cpp
#, fuzzy
@@ -16706,21 +16704,20 @@ msgstr "انتهت المهلة."
#: main/main.cpp
msgid "Runtime"
-msgstr ""
+msgstr "اثناء التشغيل"
#: main/main.cpp
msgid "Unhandled Exception Policy"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Main Loop Type"
-msgstr "إيجاد نوع العÙقدة"
+msgstr "نوع الحلقة الرئيسية"
#: main/main.cpp scene/gui/texture_progress.cpp
#: scene/gui/viewport_container.cpp
msgid "Stretch"
-msgstr ""
+msgstr "تمدد"
#: main/main.cpp
#, fuzzy
@@ -16775,38 +16772,33 @@ msgstr "تغيير نص٠قطر الدائرة الداخلي"
#: modules/csg/csg_gizmos.cpp
msgid "Change Torus Outer Radius"
-msgstr "تعديل نص٠القطر الخارجي للطارة Torus Outer Radius"
+msgstr "تعديل نص٠القطر الخارجي للمسنن"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Operation"
-msgstr "الإعدادات"
+msgstr "عملية"
#: modules/csg/csg_shape.cpp
msgid "Calculate Tangents"
-msgstr ""
+msgstr "احسب الظلال"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Use Collision"
-msgstr "التصادم"
+msgstr "استخدم التصادم"
#: modules/csg/csg_shape.cpp servers/physics_2d_server.cpp
-#, fuzzy
msgid "Collision Layer"
-msgstr "وضع التصادم"
+msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp
#: scene/3d/ray_cast.cpp scene/3d/spring_arm.cpp
#: scene/resources/navigation_mesh.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collision Mask"
-msgstr "وضع التصادم"
+msgstr ""
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Invert Faces"
-msgstr "حالة التحويل"
+msgstr "اقلب الوجوه"
#: modules/csg/csg_shape.cpp scene/2d/navigation_agent_2d.cpp
#: scene/2d/navigation_obstacle_2d.cpp scene/3d/navigation_agent.cpp
@@ -16826,37 +16818,32 @@ msgid "Radial Segments"
msgstr "معاملات المشهد الرئيس:"
#: modules/csg/csg_shape.cpp scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Rings"
-msgstr "تحذيرات"
+msgstr "خواتم"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Smooth Faces"
-msgstr "خطوة ناعمة"
+msgstr "وجوه ناعمة"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Sides"
-msgstr "أظهر الموجهات"
+msgstr "جهات"
#: modules/csg/csg_shape.cpp
msgid "Cone"
msgstr ""
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Inner Radius"
-msgstr "تغيير نص٠قطر الدائرة الداخلي"
+msgstr "القطر الداخلي"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Outer Radius"
-msgstr "تعديل نص٠القطر الخارجي للطارة Torus Outer Radius"
+msgstr "القطر الخارجي"
#: modules/csg/csg_shape.cpp
msgid "Ring Sides"
-msgstr ""
+msgstr "جهات الخاتم"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
@@ -16867,16 +16854,15 @@ msgstr "Ø§Ù„Ù…ÙØ¶Ù„عات"
#: modules/csg/csg_shape.cpp
msgid "Spin Degrees"
-msgstr ""
+msgstr "درجة الدوران"
#: modules/csg/csg_shape.cpp
msgid "Spin Sides"
-msgstr ""
+msgstr "جهة الدوران"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path Node"
-msgstr "لصق العÙقد"
+msgstr "مسار العقدة"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16907,9 +16893,8 @@ msgid "Path Continuous U"
msgstr "متواصل"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path U Distance"
-msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:"
+msgstr "المسار المحلي"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16917,28 +16902,26 @@ msgid "Path Joined"
msgstr "دوران عشوائي:"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Compression Mode"
-msgstr "وضع التصادم"
+msgstr "وضع الضغط"
#: modules/enet/networked_multiplayer_enet.cpp
#, fuzzy
msgid "Transfer Channel"
-msgstr "تعديل التحولات"
+msgstr "نقل القنوات"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Channel Count"
-msgstr "كائن"
+msgstr "عدد القنوات"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Always Ordered"
-msgstr "إظهار الشبكة دوماً"
+msgstr "مطلوب دائمًا"
#: modules/enet/networked_multiplayer_enet.cpp
+#, fuzzy
msgid "Server Relay"
-msgstr ""
+msgstr "تناوب الخادم"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Verify"
@@ -16962,30 +16945,25 @@ msgid "Use FBX"
msgstr ""
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Config File"
-msgstr "تخزين الملÙ:"
+msgstr "مل٠التهيئة"
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Load Once"
-msgstr "تحميل المورد"
+msgstr "حمل مرة واحدة"
#: modules/gdnative/gdnative.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Singleton"
-msgstr "الهيكل"
+msgstr ""
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Symbol Prefix"
-msgstr "بادئة:"
+msgstr "رمز البادئة"
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Reloadable"
-msgstr "إعادة تحميل"
+msgstr "قابل لإعادة التحميل"
#: modules/gdnative/gdnative.cpp
#: modules/gdnative/gdnative_library_singleton_editor.cpp
@@ -17003,7 +16981,7 @@ msgstr "اختر تبعيات المكتبة لأجل هذا الإدخال"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Remove current entry"
-msgstr "مسح المدخلة الحالية"
+msgstr "مسح المدخلات الحالية"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Double click to create a new entry"
@@ -17052,9 +17030,8 @@ msgid "Script Class"
msgstr "اسم النص البرمجي:"
#: modules/gdnative/nativescript/nativescript.cpp
-#, fuzzy
msgid "Icon Path"
-msgstr "مسار التركيز"
+msgstr "مسار الأيقونة"
#: modules/gdnative/register_types.cpp
msgid "GDNative"
@@ -17062,18 +17039,16 @@ msgstr "لغة البرمجة GDNative"
#: modules/gdscript/editor/gdscript_highlighter.cpp
#: modules/gdscript/gdscript.cpp
-#, fuzzy
msgid "GDScript"
-msgstr "النص البرمجي"
+msgstr "لغة جي دي"
#: modules/gdscript/editor/gdscript_highlighter.cpp
msgid "Function Definition Color"
-msgstr ""
+msgstr "لون تعري٠الدالة"
#: modules/gdscript/editor/gdscript_highlighter.cpp
-#, fuzzy
msgid "Node Path Color"
-msgstr "نسخ مسار العÙقدة"
+msgstr "لون مسار العقدة"
#: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp
msgid "Max Call Stack"
@@ -17101,11 +17076,11 @@ msgstr "ليس نص برمجي مع نموذج"
#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
-msgstr "لا تستند الى نص برمجي"
+msgstr "غير مبني على نص برمجي"
#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
-msgstr "لا يعتمد على مل٠موارد"
+msgstr "غير مبني على مل٠موارد"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
@@ -17128,14 +17103,12 @@ msgid "Object can't provide a length."
msgstr "لا يمكن للكائن أن يمنح طولاً."
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Language Server"
-msgstr "اللغة:"
+msgstr "لغة الخادك"
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Enable Smart Resolve"
-msgstr "لا يمكن الحل"
+msgstr "ØªÙØ¹ÙŠÙ„ الحل الذكي"
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Show Native Symbols In Editor"
@@ -17143,7 +17116,7 @@ msgstr ""
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Use Thread"
-msgstr ""
+msgstr "استخدم المسار"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
#, fuzzy
@@ -17166,14 +17139,12 @@ msgid "Byte Offset"
msgstr "مقدار إزاحة الشبكة:"
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Component Type"
-msgstr "مكونات"
+msgstr "نوع المكون"
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Normalized"
-msgstr "البنية (اللاحقة)"
+msgstr ""
#: modules/gltf/gltf_accessor.cpp
#, fuzzy
@@ -17181,14 +17152,12 @@ msgid "Count"
msgstr "الكمية:"
#: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Min"
-msgstr "ميبي بايت (MiB)"
+msgstr "أقل"
#: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Max"
-msgstr "خلط"
+msgstr "أعلى"
#: modules/gltf/gltf_accessor.cpp
#, fuzzy
@@ -17238,7 +17207,7 @@ msgstr "جميع الأجهزة"
#: modules/gltf/gltf_camera.cpp
#, fuzzy
msgid "FOV Size"
-msgstr "الحجم:"
+msgstr "حجم مساحةالرؤية"
#: modules/gltf/gltf_camera.cpp
msgid "Zfar"
@@ -17257,27 +17226,25 @@ msgstr "خطي"
#: scene/resources/environment.cpp scene/resources/material.cpp
#: scene/resources/particles_material.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp
-#, fuzzy
msgid "Color"
msgstr "الألوان"
#: modules/gltf/gltf_light.cpp scene/3d/reflection_probe.cpp
#: scene/resources/environment.cpp
msgid "Intensity"
-msgstr ""
+msgstr "Ø§Ù„ÙƒØ«Ø§ÙØ© | الشدة"
#: modules/gltf/gltf_light.cpp scene/2d/light_2d.cpp scene/3d/light.cpp
-#, fuzzy
msgid "Range"
-msgstr "تغير"
+msgstr "نطاق"
#: modules/gltf/gltf_light.cpp
msgid "Inner Cone Angle"
-msgstr ""
+msgstr "زاوية المخروط الداخلية"
#: modules/gltf/gltf_light.cpp
msgid "Outer Cone Angle"
-msgstr ""
+msgstr "زاوية المخروط الخارجية"
#: modules/gltf/gltf_mesh.cpp
#, fuzzy
@@ -17290,9 +17257,8 @@ msgid "Instance Materials"
msgstr "تغيرات المادة:"
#: modules/gltf/gltf_node.cpp scene/3d/skeleton.cpp
-#, fuzzy
msgid "Parent"
-msgstr "إعادة اختيار الأبوة"
+msgstr "أب"
#: modules/gltf/gltf_node.cpp
#, fuzzy
@@ -17316,20 +17282,20 @@ msgstr "أبناء قابلين للتعديل"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
#, fuzzy
msgid "Joints"
-msgstr "نقطة"
+msgstr "Ø§Ù„Ù…ÙØ§ØµÙ„"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
msgid "Roots"
-msgstr ""
+msgstr "الجذور"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_state.cpp
msgid "Unique Names"
-msgstr ""
+msgstr "أسماء مميزة"
#: modules/gltf/gltf_skeleton.cpp
#, fuzzy
msgid "Godot Bone Node"
-msgstr "عقدة التنقل الزمني"
+msgstr "عقدة جودو العظمية"
#: modules/gltf/gltf_skin.cpp
#, fuzzy
@@ -17346,9 +17312,8 @@ msgid "Inverse Binds"
msgstr ""
#: modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Non Joints"
-msgstr "تحريك النÙقطة"
+msgstr "بلا Ù…ÙØ§ØµÙ„"
#: modules/gltf/gltf_skin.cpp
msgid "Joint I To Bone I"
@@ -17372,12 +17337,11 @@ msgstr ""
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Gloss Factor"
-msgstr ""
+msgstr "عامل اللمعان"
#: modules/gltf/gltf_spec_gloss.cpp
-#, fuzzy
msgid "Specular Factor"
-msgstr "Ù…ÙØ´ØºÙ„ الكمية القياسية Scalar."
+msgstr "عامل ال"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Spec Gloss Img"
@@ -17385,17 +17349,15 @@ msgstr ""
#: modules/gltf/gltf_state.cpp
msgid "Json"
-msgstr ""
+msgstr "جيسون"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Major Version"
-msgstr "الإصدار"
+msgstr "إصدار رئيسي"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Minor Version"
-msgstr "الإصدار"
+msgstr "إصدار ÙØ±Ø¹ÙŠ"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17416,9 +17378,8 @@ msgid "Accessors"
msgstr ""
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Scene Name"
-msgstr "المسار للمشهد:"
+msgstr "اسم المشهد"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17433,21 +17394,19 @@ msgstr "المزايا"
#: modules/gltf/gltf_state.cpp platform/uwp/export/export.cpp
msgid "Images"
-msgstr ""
+msgstr "الصور"
#: modules/gltf/gltf_state.cpp
msgid "Cameras"
-msgstr ""
+msgstr "الكاميرات"
#: modules/gltf/gltf_state.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Lights"
-msgstr "ضوء"
+msgstr "الأضواء"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Unique Animation Names"
-msgstr "إسم رسم المتحرك جديد:"
+msgstr "أسماء حركات مميزة"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17455,37 +17414,32 @@ msgid "Skeletons"
msgstr "الهيكل"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Skeleton To Node"
-msgstr "اختر عÙقدة"
+msgstr "هيكل إلى عقدة"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Animations"
-msgstr "الرسومات المتحركة:"
+msgstr "الحركات"
#: modules/gltf/gltf_texture.cpp
-#, fuzzy
msgid "Src Image"
-msgstr "إظهار العظام"
+msgstr "مصدر الصورة"
#: modules/gridmap/grid_map.cpp
msgid "Mesh Library"
msgstr "مكتبة المجسم"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Physics Material"
-msgstr "نسبة الإطار الÙيزيائي %"
+msgstr "مادة"
#: modules/gridmap/grid_map.cpp scene/3d/visual_instance.cpp
-#, fuzzy
msgid "Use In Baked Light"
-msgstr "طبخ (إعداد) خرائط الضوء"
+msgstr "استخدام ÙÙŠ الإضاءة المطبوخة"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
msgid "Cell"
-msgstr ""
+msgstr "خلية"
#: modules/gridmap/grid_map.cpp
#, fuzzy
@@ -17493,19 +17447,16 @@ msgid "Octant Size"
msgstr "الواجهة View الأمامية"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center X"
-msgstr "المنتصÙ"
+msgstr "منتص٠س"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center Y"
-msgstr "المنتصÙ"
+msgstr "منتص٠ص"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center Z"
-msgstr "المنتصÙ"
+msgstr "منتصÙ"
#: modules/gridmap/grid_map.cpp scene/2d/collision_object_2d.cpp
#: scene/2d/tile_map.cpp scene/3d/collision_object.cpp scene/3d/soft_body.cpp
@@ -17671,14 +17622,12 @@ msgid "Generate buffers"
msgstr "ولد AABB"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
-#, fuzzy
msgid "Direct lighting"
-msgstr "الاتجاهات"
+msgstr "إضاءة مباشرة"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
-#, fuzzy
msgid "Indirect lighting"
-msgstr "Ø§Ù„Ù…Ø³Ø§ÙØ© البادئة يميناً"
+msgstr "إضاءة غير مباشرة"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
#, fuzzy
@@ -17714,27 +17663,24 @@ msgstr ""
#: modules/minimp3/resource_importer_mp3.cpp
#: modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
#: modules/stb_vorbis/resource_importer_ogg_vorbis.cpp
-#, fuzzy
msgid "Loop Offset"
-msgstr "Ø§Ù„Ù…ÙØ¹Ø§Ø¯Ù„:"
+msgstr "إزاحة الحلقة"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "Eye Height"
-msgstr ""
+msgstr "Ø§Ø±ØªÙØ§Ø¹ الغين"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "IOD"
msgstr ""
#: modules/mobile_vr/mobile_vr_interface.cpp
-#, fuzzy
msgid "Display Width"
-msgstr "عرض Ø§Ù„Ù…ÙØ®Ø·Ø· Wireframe"
+msgstr "عرض الشاشة"
#: modules/mobile_vr/mobile_vr_interface.cpp
-#, fuzzy
msgid "Display To Lens"
-msgstr "عرض من غير ظلال"
+msgstr "شاشة إلى عدسة"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "Oversample"
@@ -17753,14 +17699,12 @@ msgid "Class name can't be a reserved keyword"
msgstr "لا يمكن أن يكون اسم الص٠كلمة محجوزة"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "تعبئة Ø§Ù„Ù…ÙØ­Ø¯Ø¯"
+msgstr ""
#: modules/mono/editor/csharp_project.cpp
-#, fuzzy
msgid "Auto Update Project"
-msgstr "مشروع غير مسمى"
+msgstr "تحديث المشروع تلقائيًا"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -17837,9 +17781,8 @@ msgid "Seamless"
msgstr ""
#: modules/opensimplex/noise_texture.cpp
-#, fuzzy
msgid "As Normal Map"
-msgstr "حجم عشوائي:"
+msgstr "كخريطة عادية"
#: modules/opensimplex/noise_texture.cpp
msgid "Bump Strength"
@@ -17847,7 +17790,7 @@ msgstr ""
#: modules/opensimplex/noise_texture.cpp
msgid "Noise"
-msgstr ""
+msgstr "ضوضاء"
#: modules/opensimplex/noise_texture.cpp
#, fuzzy
@@ -17860,7 +17803,7 @@ msgstr ""
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Period"
-msgstr ""
+msgstr "ÙØªØ±Ø©"
#: modules/opensimplex/open_simplex_noise.cpp
#, fuzzy
@@ -17876,14 +17819,12 @@ msgid "Subject"
msgstr ""
#: modules/regex/regex.cpp
-#, fuzzy
msgid "Names"
-msgstr "الأسم"
+msgstr "الأسماء"
#: modules/regex/regex.cpp
-#, fuzzy
msgid "Strings"
-msgstr "الإعدادات:"
+msgstr "النصوص"
#: modules/upnp/upnp.cpp
msgid "Discover Multicast If"
@@ -17898,14 +17839,12 @@ msgid "Discover IPv6"
msgstr ""
#: modules/upnp/upnp_device.cpp
-#, fuzzy
msgid "Description URL"
-msgstr "الوصÙ"
+msgstr "وص٠الرابط"
#: modules/upnp/upnp_device.cpp
-#, fuzzy
msgid "Service Type"
-msgstr "تحيد نوع المتغير"
+msgstr "نوع الخدمة"
#: modules/upnp/upnp_device.cpp
msgid "IGD Control URL"
@@ -17959,9 +17898,8 @@ msgid "Stack overflow with stack depth:"
msgstr "حدوث تجاوز للتكدس ( Stack overflow) مع عمق التكدس:"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Visual Script"
-msgstr "بحث VisualScript"
+msgstr "البرمجة المرئية"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Signal Arguments"
@@ -17992,14 +17930,12 @@ msgid "Add Output Port"
msgstr "Ø£Ø¶Ù Ù…Ù†ÙØ° إخراج"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "تغيير النوع"
+msgstr "تغيير نوع Ø§Ù„Ù…Ù†ÙØ°"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "غيّر اسم Ù…Ù†ÙØ° Ø§Ù„Ù…ÙØ¯Ø®Ù„ات"
+msgstr "تغيير اسم Ø§Ù„Ù…Ù†ÙØ°"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -18185,7 +18121,7 @@ msgstr "تعديل قيمة الإدخال"
#: modules/visual_script/visual_script_editor.cpp
msgid "Resize Comment"
-msgstr "تغيير حجم التعليق"
+msgstr "تغيير حجم الملاحظة"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
@@ -22836,9 +22772,8 @@ msgstr ""
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
#: scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Pixel Size"
-msgstr "محاذاة البكسل"
+msgstr "حجم البكسل"
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
msgid "Billboard"
@@ -23377,9 +23312,8 @@ msgid "Solver"
msgstr ""
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Exclude Nodes"
-msgstr "حذ٠العÙقد"
+msgstr "استثناء العÙقد"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23445,14 +23379,12 @@ msgid "Linear Ortho"
msgstr "نظر من الخل٠(متعامد/ليس له بعد ثالث)"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Upper Angle"
-msgstr "الأحر٠الكبيرة (Uppercase)"
+msgstr "الزاوية العلوية"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Lower Angle"
-msgstr "الأحر٠الصغيرة (Lowercase)"
+msgstr "الزاوية السÙلية"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23608,9 +23540,8 @@ msgid "Thickness"
msgstr ""
#: scene/3d/reflection_probe.cpp scene/main/viewport.cpp
-#, fuzzy
msgid "Update Mode"
-msgstr "وضع التدوير"
+msgstr "وضع التحديث"
#: scene/3d/reflection_probe.cpp
#, fuzzy
@@ -23709,7 +23640,7 @@ msgstr "يجب ØªÙˆØ§ÙØ± مدير-غر٠(RoomManager) واحد Ùقط ÙÙŠ Ø´Ø
#: scene/3d/room_manager.cpp
msgid "Main"
-msgstr ""
+msgstr "رئيسي | الرئيسي"
#: scene/3d/room_manager.cpp scene/animation/animation_blend_tree.cpp
#: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp
@@ -23972,13 +23903,12 @@ msgid "Per-Wheel Motion"
msgstr "زر العجلة للأسÙÙ„"
#: scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Engine Force"
-msgstr "مستندات الإنترنت"
+msgstr "قوة المحرك"
#: scene/3d/vehicle_body.cpp
msgid "Brake"
-msgstr ""
+msgstr "ÙØ±Ø§Ù…Ù„ | مكابح"
#: scene/3d/vehicle_body.cpp
msgid "Steering"
@@ -23998,9 +23928,8 @@ msgid "Use As Steering"
msgstr ""
#: scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Wheel"
-msgstr "العجلة نحو الأقصى."
+msgstr "عجلة"
#: scene/3d/vehicle_body.cpp
msgid "Roll Influence"
@@ -24130,14 +24059,12 @@ msgid "Fadeout Time"
msgstr "وقت التلاشي X (ثواني):"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Auto Restart"
-msgstr "إعادة تشغيل تلقائية:"
+msgstr "إعادة تشغيل تلقائية"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Autorestart"
-msgstr "إعادة تشغيل تلقائية:"
+msgstr "إعادة تشغيل تلقائية"
#: scene/animation/animation_blend_tree.cpp
msgid "Delay"
diff --git a/editor/translations/az.po b/editor/translations/az.po
index cd3e8def9b..3a59e8aa41 100644
--- a/editor/translations/az.po
+++ b/editor/translations/az.po
@@ -2163,14 +2163,15 @@ msgstr "Favoritlər:"
msgid "Recent:"
msgstr "Son:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Axtar:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "UyÄŸunlaÅŸmalar:"
@@ -2230,8 +2231,8 @@ msgstr "ÆvÉ™zetmÉ™ mÉ™nbÉ™yini axtarın:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5410,6 +5411,10 @@ msgid "Drag And Drop Selection"
msgstr "Ölçmə seçimi"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11445,6 +11450,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Animasiyanı Təmizləmə"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index 06d16ebe96..877823c869 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -2177,14 +2177,15 @@ msgstr "Любими:"
msgid "Recent:"
msgstr "ПоÑледни:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "ТърÑене:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "СъвпадениÑ:"
@@ -2244,8 +2245,8 @@ msgstr "ТърÑене на замеÑтващ реÑурÑ:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5494,6 +5495,10 @@ msgid "Drag And Drop Selection"
msgstr "ÐаÑтройки"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11659,6 +11664,11 @@ msgid "New Animation"
msgstr "Ðова анимациÑ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Филтриране на методите"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "СкороÑÑ‚:"
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index c2ed1a7596..8379e2de5b 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -2233,14 +2233,15 @@ msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ:"
msgid "Recent:"
msgstr "সামà§à¦ªà§à¦°à¦¤à¦¿à¦•:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "মিলসমূহ:"
@@ -2302,8 +2303,8 @@ msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦• রিসোরà§à¦¸-à¦à¦° অনà§
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5821,6 +5822,10 @@ msgid "Drag And Drop Selection"
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12482,6 +12487,11 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨"
#: editor/plugins/sprite_frames_editor_plugin.cpp
#, fuzzy
+msgid "Filter animations"
+msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
msgid "Speed:"
msgstr "গতি (FPS):"
diff --git a/editor/translations/br.po b/editor/translations/br.po
index 2d7b6fe900..f86b01cc44 100644
--- a/editor/translations/br.po
+++ b/editor/translations/br.po
@@ -2108,14 +2108,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2171,8 +2172,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5318,6 +5319,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11309,6 +11314,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Tro Fiñvskeudenn"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 67f0296b05..b1ee6245f6 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -2143,14 +2143,15 @@ msgstr "Favorits:"
msgid "Recent:"
msgstr "Recents:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Cerca:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Coincidències:"
@@ -2210,8 +2211,8 @@ msgstr "Cerca Recurs Reemplaçant:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5607,6 +5608,10 @@ msgid "Drag And Drop Selection"
msgstr "Elimina la Selecció del GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11962,6 +11967,11 @@ msgstr "Nova Animació"
#: editor/plugins/sprite_frames_editor_plugin.cpp
#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrar mètodes"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
msgid "Speed:"
msgstr "Velocitat (FPS):"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index a166951396..c27334b374 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -2238,14 +2238,15 @@ msgstr "Oblíbené:"
msgid "Recent:"
msgstr "Nedávné:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Hledat:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Shody:"
@@ -2305,8 +2306,8 @@ msgstr "Hledat náhradní zdroj:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5681,6 +5682,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap Vyplnit výběr"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11953,6 +11958,11 @@ msgid "New Animation"
msgstr "Nová animace"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrovat metody"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Rychlost:"
diff --git a/editor/translations/da.po b/editor/translations/da.po
index b4f7334278..3dc6f52da1 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -2227,14 +2227,15 @@ msgstr "Favoritter:"
msgid "Recent:"
msgstr "Seneste:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Søgning:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Matches:"
@@ -2296,8 +2297,8 @@ msgstr "Søg Erstatnings Ressource:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5734,6 +5735,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap Slet Markerede"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12145,6 +12150,11 @@ msgid "New Animation"
msgstr "Ny Animation Navn:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filter mode:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/de.po b/editor/translations/de.po
index 64b8268adb..5035a7aa5d 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -87,7 +87,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-09 21:11+0000\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
"Last-Translator: So Wieso <sowieso@dukun.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
@@ -96,7 +96,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -520,9 +520,8 @@ msgid "Pressure"
msgstr "Druck"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pen Inverted"
-msgstr "Umkehren"
+msgstr "Stift invertiert"
#: core/os/input_event.cpp
msgid "Relative"
@@ -2169,14 +2168,15 @@ msgstr "Favoriten:"
msgid "Recent:"
msgstr "Kürzlich:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Suche:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Treffer:"
@@ -2236,8 +2236,8 @@ msgstr "Ersatzressource suchen:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5568,6 +5568,10 @@ msgid "Drag And Drop Selection"
msgstr "Auswahl ziehen und fallen lassen"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Aussehen"
@@ -11693,6 +11697,11 @@ msgid "New Animation"
msgstr "Neue Animation"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Methoden filtern"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Geschwindigkeit:"
@@ -23109,9 +23118,8 @@ msgstr ""
"geändert werden."
#: scene/3d/spatial.cpp
-#, fuzzy
msgid "Global Translation"
-msgstr "Globales Transform"
+msgstr "Globale Verschiebung"
#: scene/3d/spatial.cpp
msgid "Matrix"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index 231863615b..c207124fcb 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -2060,14 +2060,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2123,8 +2124,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5256,6 +5257,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11206,6 +11211,10 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Filter animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/el.po b/editor/translations/el.po
index 8511b4fdd2..85005d903a 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -2184,14 +2184,15 @@ msgstr "Αγαπημένα:"
msgid "Recent:"
msgstr "ΠÏόσφατα:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Αναζήτηση:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Αντιστοιχίες:"
@@ -2251,8 +2252,8 @@ msgstr "Αναζήτηση αντικαταστάτη πόÏου:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5663,6 +5664,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap Γέμισμα Επιλογής"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12044,6 +12049,11 @@ msgid "New Animation"
msgstr "Îέα Κίνηση"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "ΦιλτÏάÏισμα μεθόδων"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "ΤαχÏτητα:"
diff --git a/editor/translations/en_Shaw.po b/editor/translations/en_Shaw.po
index d69ca8d97f..45d0549a81 100644
--- a/editor/translations/en_Shaw.po
+++ b/editor/translations/en_Shaw.po
@@ -2083,14 +2083,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2146,8 +2147,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5284,6 +5285,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11257,6 +11262,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index 3b651b3e97..5a251ba489 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -2206,14 +2206,15 @@ msgstr "Favoritaj:"
msgid "Recent:"
msgstr "Lastatempe:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Serĉo:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Matĉoj:"
@@ -2273,8 +2274,8 @@ msgstr "Serĉi anstataŭiga risurco:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5656,6 +5657,10 @@ msgid "Drag And Drop Selection"
msgstr "Enkadrigi elekton"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11939,6 +11944,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Forigi animacion?"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/es.po b/editor/translations/es.po
index 3c21955a46..872fedfdac 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -86,8 +86,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-06-29 10:04+0000\n"
-"Last-Translator: Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>\n"
+"PO-Revision-Date: 2022-07-27 13:26+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"
@@ -95,7 +95,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -467,9 +467,8 @@ msgid "Command"
msgstr "Command"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Physical"
-msgstr " (Física)"
+msgstr "Física"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
@@ -523,7 +522,7 @@ msgstr "Presionado"
#: core/os/input_event.cpp
msgid "Pen Inverted"
-msgstr ""
+msgstr "Pluma Invertida"
#: core/os/input_event.cpp
msgid "Relative"
@@ -725,14 +724,12 @@ msgid "Script Templates Search Path"
msgstr "Ruta de Búsqueda de Plantillas de Scripts"
#: core/project_settings.cpp
-#, fuzzy
msgid "Version Control Autoload On Startup"
-msgstr "Cargar automáticamente al inicio"
+msgstr "Carga Automática de Control de Versiones al Inicio"
#: core/project_settings.cpp
-#, fuzzy
msgid "Version Control Plugin Name"
-msgstr "Control de Versiones"
+msgstr "Nombre del Plugin de Control de Versiones"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -1222,21 +1219,19 @@ msgid "Type"
msgstr "Tipo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In Handle"
-msgstr "Establecer Manipulador"
+msgstr "En el Manipulador"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out Handle"
-msgstr "Establecer Manipulador"
+msgstr "Fuera del Manipulador"
#: editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
msgid "Stream"
-msgstr ""
+msgstr "Stream"
#: editor/animation_track_editor.cpp
msgid "Start Offset"
@@ -1257,9 +1252,8 @@ msgid "Animation"
msgstr "Animación"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing"
-msgstr "Entrada-Salida Suave"
+msgstr "Suavizar"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Time"
@@ -1414,19 +1408,16 @@ msgid "Stream:"
msgstr "Stream:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "Reiniciar (s):"
+msgstr "Inicio (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "Fundido de entrada (s):"
+msgstr "Fin (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Animaciones:"
+msgstr "Clip de Animación:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -2180,14 +2171,15 @@ msgstr "Favoritos:"
msgid "Recent:"
msgstr "Recientes:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Buscar:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Coincidencias:"
@@ -2247,8 +2239,8 @@ msgstr "Buscar Recurso de Reemplazo:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2257,7 +2249,7 @@ msgstr "Abrir"
#: editor/dependency_editor.cpp
msgid "Owners of: %s (Total: %d)"
-msgstr ""
+msgstr "Propietarios de: %s (Total: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2984,9 +2976,8 @@ msgid "Custom release template not found."
msgstr "Plantilla release personalizada no encontrada."
#: editor/editor_export.cpp
-#, fuzzy
msgid "Prepare Template"
-msgstr "Administrar Plantillas"
+msgstr "Preparar Plantilla"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "The given export path doesn't exist."
@@ -3002,9 +2993,8 @@ msgstr "Fallo al copiar la plantilla de exportación."
#: editor/editor_export.cpp platform/windows/export/export.cpp
#: platform/x11/export/export.cpp
-#, fuzzy
msgid "PCK Embedding"
-msgstr "Relleno"
+msgstr "Integrar PCK"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3403,7 +3393,7 @@ msgstr "Mostrar/Ocultar archivos ocultos."
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails."
-msgstr "Ver elementos como una cuadrícula de miniaturas."
+msgstr "Sesgo del nivel de división de la cuadrícula."
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a list."
@@ -4583,7 +4573,7 @@ msgstr "Exportar…"
#: editor/editor_node.cpp
msgid "Install Android Build Template..."
-msgstr "Instalar plantilla de compilación de Android..."
+msgstr "Instalar Plantilla de Compilación de Android..."
#: editor/editor_node.cpp
msgid "Open User Data Folder"
@@ -4902,8 +4892,8 @@ msgstr ""
"personalizado al exportarlo (agregando módulos, cambiando el AndroidManifest."
"xml, etc.).\n"
"Ten en cuenta que para realizar compilaciones personalizadas en lugar de "
-"usar APKs predefinidos, la opción \"Use Custom Build\" debería estar "
-"habilitada en la configuración de exportación de Android."
+"usar APKs predefinidos, la opción \"Usar Compilación Personalizada\" debería "
+"estar habilitada en la configuración de exportación de Android."
#: editor/editor_node.cpp
msgid ""
@@ -5285,9 +5275,8 @@ msgstr ""
"preset existente como ejecutable."
#: editor/editor_run_native.cpp
-#, fuzzy
msgid "Project Run"
-msgstr "Proyecto"
+msgstr "Ejecutar Proyecto"
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -5359,11 +5348,11 @@ msgstr "Atenuar Editor en Diálogo de Popup"
#: editor/editor_settings.cpp main/main.cpp
msgid "Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "Modo de Reposo en Consumo Bajo del Procesador (µsec)"
#: editor/editor_settings.cpp
msgid "Unfocused Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "Modo de Bajo Uso del Procesador Desconectado (µseg)"
#: editor/editor_settings.cpp
msgid "Separate Distraction Mode"
@@ -5375,7 +5364,7 @@ msgstr "Abrir Capturas De Pantalla Automáticamente"
#: editor/editor_settings.cpp
msgid "Max Array Dictionary Items Per Page"
-msgstr ""
+msgstr "Cantidad Máxima de Elementos del Diccionario por Página"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp scene/gui/control.cpp
@@ -5453,7 +5442,7 @@ msgstr "Comprimir Recursos Binarios"
#: editor/editor_settings.cpp
msgid "Safe Save On Backup Then Rename"
-msgstr ""
+msgstr "Guardar de Forma Segura en el Backup y luego Renombrar"
#: editor/editor_settings.cpp
msgid "File Dialog"
@@ -5465,7 +5454,7 @@ msgstr "Tamaño de las Miniaturas"
#: editor/editor_settings.cpp
msgid "Docks"
-msgstr ""
+msgstr "Paneles"
#: editor/editor_settings.cpp
msgid "Scene Tree"
@@ -5488,9 +5477,8 @@ msgid "Auto Refresh Interval"
msgstr "Intervalo de Auto Refrescar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Subresource Hue Tint"
-msgstr "Sub-Recursos"
+msgstr "Subrecurso Tinte del Tono"
#: editor/editor_settings.cpp
msgid "Color Theme"
@@ -5570,9 +5558,12 @@ msgid "Mouse Extra Buttons Navigate History"
msgstr "Botones Extra del Ratón Navegar por el Historial"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Drag And Drop Selection"
-msgstr "Seleccionar GridMap"
+msgstr "Arrastrar y Soltar la Selección"
+
+#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
#: editor/editor_settings.cpp
msgid "Appearance"
@@ -5616,7 +5607,7 @@ msgstr "Directriz de longitud de Línea de Columna Flexible"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Hard Column"
-msgstr ""
+msgstr "Longitud de Línea de la Guía de la Columna Rígida"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
msgid "Script List"
@@ -5806,7 +5797,7 @@ msgstr "Nivel Mínimo de División de Cuadrícula"
#: editor/editor_settings.cpp
msgid "Grid Division Level Bias"
-msgstr ""
+msgstr "Sesgo del Nivel de División de la Cuadrícula"
#: editor/editor_settings.cpp
msgid "Grid XZ Plane"
@@ -5865,23 +5856,20 @@ msgid "Orbit Modifier"
msgstr "Modificador de Órbita"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Pan Modifier"
-msgstr "Modo desplazamiento lateral"
+msgstr "Modificador Panorámico"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Zoom Modifier"
-msgstr "Modificado/s"
+msgstr "Modificador de Zoom"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Warped Mouse Panning"
-msgstr ""
+msgstr "Paneo del Mouse Deformado"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Navigation Feel"
-msgstr "Modo de Navegación"
+msgstr "Sensación de Navegación"
#: editor/editor_settings.cpp
msgid "Orbit Sensitivity"
@@ -5924,9 +5912,8 @@ msgid "Freelook Activation Modifier"
msgstr "Modificador de Activación de Vista Libre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Speed Zoom Link"
-msgstr "Modificador de Velocidad de Vista Libre"
+msgstr "Velocidad de Zoom de Vista Libre"
#: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Grid Color"
@@ -5974,7 +5961,7 @@ msgstr "Color del Borde del Viewport"
#: editor/editor_settings.cpp
msgid "Constrain Editor View"
-msgstr ""
+msgstr "Vista del Editor de Restricciones"
#: editor/editor_settings.cpp
msgid "Simple Panning"
@@ -6035,14 +6022,12 @@ msgstr "Ubicación de la Ventana"
#: editor/editor_settings.cpp scene/2d/back_buffer_copy.cpp scene/2d/sprite.cpp
#: scene/2d/visibility_notifier_2d.cpp scene/3d/sprite_3d.cpp
#: scene/gui/control.cpp
-#, fuzzy
msgid "Rect"
-msgstr "Completo"
+msgstr "Rect"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Rect Custom Position"
-msgstr "Establecer Posición de Salida de Curva"
+msgstr "Posición Personalizada de Rect"
#: editor/editor_settings.cpp platform/android/export/export_plugin.cpp
msgid "Screen"
@@ -6108,24 +6093,23 @@ msgstr "Color de Palabra Clave"
#: editor/editor_settings.cpp
msgid "Control Flow Keyword Color"
-msgstr ""
+msgstr "Control de Flujo Color de Palabra Clave"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Base Type Color"
-msgstr "Tipo Base"
+msgstr "Tipo de Color Base"
#: editor/editor_settings.cpp
msgid "Engine Type Color"
-msgstr ""
+msgstr "Tipo de Color del Engine"
#: editor/editor_settings.cpp
msgid "User Type Color"
-msgstr ""
+msgstr "Tipo de Color del Usuario"
#: editor/editor_settings.cpp
msgid "Comment Color"
-msgstr ""
+msgstr "Color de los Comentarios"
#: editor/editor_settings.cpp
msgid "String Color"
@@ -6142,25 +6126,24 @@ msgid "Completion Background Color"
msgstr "Completar Color de Fondo"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Completion Selected Color"
-msgstr "Importar Seleccionado"
+msgstr "Completar Color Seleccionado"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Existing Color"
-msgstr ""
+msgstr "Completar Color Existente"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Scroll Color"
-msgstr ""
+msgstr "Completar Color de Scroll"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Font Color"
-msgstr ""
+msgstr "Completar Color de la Fuente"
#: editor/editor_settings.cpp
msgid "Text Color"
-msgstr "Color de Texto"
+msgstr "Color del Texto"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Line Number Color"
@@ -6199,33 +6182,28 @@ msgid "Line Length Guideline Color"
msgstr ""
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Word Highlighted Color"
-msgstr "Resaltador de Sintaxis"
+msgstr "Color de la Palabra Resaltada"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Number Color"
msgstr ""
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Function Color"
-msgstr "Función"
+msgstr "Función Color"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Member Variable Color"
-msgstr "Cambiar nombre de variable"
+msgstr "Color de la Variable Miembro"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Mark Color"
-msgstr "Seleccionar Color"
+msgstr "Marcar Color"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Bookmark Color"
-msgstr "Marcadores"
+msgstr "Color del Marcador"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Breakpoint Color"
@@ -6240,14 +6218,12 @@ msgid "Code Folding Color"
msgstr ""
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Search Result Color"
-msgstr "Resultados de la Búsqueda"
+msgstr "Color del Resultado de Búsqueda"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Search Result Border Color"
-msgstr "Resultados de la Búsqueda"
+msgstr "Color de los Bordes del Resultado de Búsqueda"
#: editor/editor_spin_slider.cpp
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
@@ -6256,14 +6232,12 @@ msgstr ""
"la tecla Mayús para cambios más precisos."
#: editor/editor_spin_slider.cpp scene/gui/button.cpp
-#, fuzzy
msgid "Flat"
-msgstr "Plano 0"
+msgstr "Plano"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hide Slider"
-msgstr "Modo de Colisión"
+msgstr "Ocultar Deslizador"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -6941,9 +6915,8 @@ msgid "Use Ambient"
msgstr ""
#: editor/import/resource_importer_bitmask.cpp
-#, fuzzy
msgid "Create From"
-msgstr "Crear Carpeta"
+msgstr "Crear Desde"
#: editor/import/resource_importer_bitmask.cpp
#: servers/audio/effects/audio_effect_compressor.cpp
@@ -6963,9 +6936,8 @@ msgid "Delimiter"
msgstr "Delimitador"
#: editor/import/resource_importer_layered_texture.cpp
-#, fuzzy
msgid "ColorCorrect"
-msgstr "Corrección del Color"
+msgstr "Corrección de Color"
#: editor/import/resource_importer_layered_texture.cpp
msgid "No BPTC If RGB"
@@ -6993,9 +6965,8 @@ msgstr "Filtro"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Mipmaps"
-msgstr "Señales"
+msgstr "Mipmaps"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
@@ -7026,14 +6997,12 @@ msgid "Vertical"
msgstr "Vertical"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Generate Tangents"
-msgstr "Generar puntos"
+msgstr "Generar Tangentes"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Scale Mesh"
-msgstr "Modo de Escalado"
+msgstr "Escalar Mesh"
#: editor/import/resource_importer_obj.cpp
msgid "Offset Mesh"
@@ -7041,14 +7010,12 @@ msgstr "Offset de Malla"
#: editor/import/resource_importer_obj.cpp
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Octahedral Compression"
-msgstr "Compresión"
+msgstr "Compresión Octaédrica"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Optimize Mesh Flags"
-msgstr "Tamaño de los Indicadores"
+msgstr "Optimizar Marcadores de Malla"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -7092,29 +7059,24 @@ msgstr "Importar como Escenas y Materiales Múltiples"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Nodes"
msgstr "Nodos"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Type"
-msgstr "Regresar"
+msgstr "Tipo de Raíz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Name"
-msgstr "Nombre Remoto"
+msgstr "Nombre de Raíz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Scale"
-msgstr "Escala"
+msgstr "Escala de Raíz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Custom Script"
-msgstr "CustomNode"
+msgstr "Script Personalizado"
#: editor/import/resource_importer_scene.cpp scene/resources/texture.cpp
msgid "Storage"
@@ -7129,62 +7091,52 @@ msgid "Materials"
msgstr "Materiales"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Keep On Reimport"
-msgstr "Reimportar"
+msgstr "Seguir Reimportando"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Meshes"
-msgstr "Malla"
+msgstr "Meshes"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Ensure Tangents"
-msgstr "Modificar Tangente de Curva"
+msgstr "Asegurar Tangentes"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Light Baking"
-msgstr "Lightmapping"
+msgstr "Bake de Luces"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Lightmap Texel Size"
-msgstr "Calcular Lightmaps"
+msgstr "Tamaño Lightmap Texel"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
msgid "Skins"
msgstr ""
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Use Named Skins"
-msgstr "Usar Ajuste de Escalado"
+msgstr "Usar Skins con Nombre"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "External Files"
-msgstr "Abrir un Archivo"
+msgstr "Archivos Externos"
#: editor/import/resource_importer_scene.cpp
msgid "Store In Subdir"
msgstr ""
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Filter Script"
-msgstr "Filtrar scripts"
+msgstr "Filtrar Script"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Keep Custom Tracks"
-msgstr "Transformar"
+msgstr "Mantener Pistas Personalizadas"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Optimizer"
-msgstr "Optimizar"
+msgstr "Optimizador"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/item_list_editor_plugin.cpp main/main.cpp
@@ -7198,9 +7150,8 @@ msgstr "Optimizar"
#: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp
#: scene/gui/rich_text_label.cpp scene/resources/curve.cpp
#: scene/resources/environment.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Enabled"
-msgstr "Activar"
+msgstr "Activado"
#: editor/import/resource_importer_scene.cpp
msgid "Max Linear Error"
@@ -7211,19 +7162,16 @@ msgid "Max Angular Error"
msgstr "Error Angular Máximo"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Max Angle"
-msgstr "Valor"
+msgstr "Ãngulo Máximo"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Remove Unused Tracks"
-msgstr "Eliminar Pista de Animación"
+msgstr "Eliminar Pistas Sin Usar"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Clips"
-msgstr "Clips de Animación"
+msgstr "Clips"
#: editor/import/resource_importer_scene.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/particles_2d.cpp scene/3d/area.cpp scene/3d/cpu_particles.cpp
@@ -7290,18 +7238,16 @@ msgid "2D, Detect 3D"
msgstr ""
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "2D Pixel"
-msgstr "Pixeles Sólidos"
+msgstr "Pixel 2D"
#: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp
msgid "Lossy Quality"
msgstr ""
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "HDR Mode"
-msgstr "Modo de Selección"
+msgstr "Modo HDR"
#: editor/import/resource_importer_texture.cpp
msgid "BPTC LDR"
@@ -7315,45 +7261,40 @@ msgid "Normal Map"
msgstr ""
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Process"
-msgstr "Post procesado"
+msgstr "Proceso"
#: editor/import/resource_importer_texture.cpp
msgid "Fix Alpha Border"
msgstr ""
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Premult Alpha"
-msgstr "Editar Polígono"
+msgstr "Premult Alpha"
#: editor/import/resource_importer_texture.cpp
msgid "Hdr As Srgb"
msgstr ""
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Invert Color"
-msgstr "Vértice"
+msgstr "Invertir Color"
#: editor/import/resource_importer_texture.cpp
msgid "Normal Map Invert Y"
msgstr "Invertir Y en Mapa Normal"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Size Limit"
-msgstr "Límites"
+msgstr "Tamaño Límite"
#: editor/import/resource_importer_texture.cpp
msgid "Detect 3D"
msgstr ""
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "SVG"
-msgstr "HSV"
+msgstr "SVG"
#: editor/import/resource_importer_texture.cpp
msgid ""
@@ -7370,18 +7311,16 @@ msgid "Import Mode"
msgstr "Modo de Importación"
#: editor/import/resource_importer_texture_atlas.cpp
-#, fuzzy
msgid "Crop To Region"
-msgstr "Establecer Región de Tile"
+msgstr "Recortar la Región"
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Trim Alpha Border From Region"
msgstr ""
#: editor/import/resource_importer_wav.cpp scene/2d/physics_body_2d.cpp
-#, fuzzy
msgid "Force"
-msgstr "Forzar Push"
+msgstr "Fuerza"
#: editor/import/resource_importer_wav.cpp
msgid "8 Bit"
@@ -7393,41 +7332,35 @@ msgid "Mono"
msgstr ""
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Max Rate"
-msgstr "Nodo Mix"
+msgstr "Tasa Máxima"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Max Rate Hz"
-msgstr "Nodo Mix"
+msgstr "Tasa Máxima Hz"
#: editor/import/resource_importer_wav.cpp
msgid "Trim"
msgstr ""
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Normalize"
-msgstr "Formato"
+msgstr "Normalizar"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop Mode"
-msgstr "Modo de Movimiento"
+msgstr "Modo Bucle"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop Begin"
-msgstr "Modo de Movimiento"
+msgstr "Inicio del Bucle"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop End"
-msgstr "Modo de Movimiento"
+msgstr "Fin del Bucle"
#: editor/import_defaults_editor.cpp
msgid "Select Importer"
@@ -7514,14 +7447,12 @@ msgid "Raw"
msgstr "Raw"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Capitalized"
-msgstr "Capitalizar"
+msgstr "Capitalización"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Localized"
-msgstr "Idioma"
+msgstr "Localizado"
#: editor/inspector_dock.cpp
msgid "Localization not available for current language."
@@ -8075,9 +8006,8 @@ msgid "New"
msgstr "Nuevo"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Paste As Reference"
-msgstr "%s Referencia de Clase"
+msgstr "Pegar Como Referencia"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Transitions..."
@@ -8569,25 +8499,21 @@ msgid "Loading..."
msgstr "Cargar..."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "First"
msgstr "Primero"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "Previous"
msgstr "Anterior"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "Next"
msgstr "Siguiente"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "Last"
msgstr "Último"
@@ -9206,9 +9132,8 @@ msgid "View"
msgstr "Ver"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show"
-msgstr "Ver Cuadrícula"
+msgstr "Mostrar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show When Snapping"
@@ -9216,12 +9141,11 @@ msgstr "Mostrar Al Ajustar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Hide"
-msgstr ""
+msgstr "Ocultar"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Grid"
-msgstr "Cambiar Modo"
+msgstr "Cambiar Cuadrícula"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
@@ -9843,7 +9767,6 @@ msgstr ""
"%s"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "MeshLibrary"
msgstr "Librería de Mallas"
@@ -9868,14 +9791,12 @@ msgid "Update from Scene"
msgstr "Actualizar desde escena"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Apply without Transforms"
-msgstr "Aplicar Transformaciones al MeshInstance"
+msgstr "Aplicar sin Transformaciones"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Apply with Transforms"
-msgstr "Aplicar Transformaciones al MeshInstance"
+msgstr "Aplicar con Transformaciones"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and no MultiMesh set in node)."
@@ -10744,19 +10665,16 @@ msgid "External"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Use External Editor"
-msgstr "Depurar con Editor Externo"
+msgstr "Usar un Editor Externo"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Exec Path"
-msgstr "Ruta de Exportación"
+msgstr "Ruta de Ejecución"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Script Temperature Enabled"
-msgstr "Seleccionar el archivo de la plantilla"
+msgstr "Temperatura del Script Activada"
#: editor/plugins/script_editor_plugin.cpp
msgid "Highlight Current Script"
@@ -10771,14 +10689,12 @@ msgid "Current Script Background Color"
msgstr "Color de Fondo del Script Actual"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Group Help Pages"
-msgstr "Agrupar Seleccionados"
+msgstr "Páginas de Ayuda para Grupos"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Sort Scripts By"
-msgstr "Crear Script"
+msgstr "Ordenar Scripts por"
#: editor/plugins/script_editor_plugin.cpp
msgid "List Script Names As"
@@ -10995,8 +10911,8 @@ msgid ""
"This shader has been modified on on disk.\n"
"What action should be taken?"
msgstr ""
-"Este shader ha sido modificado en disco.\n"
-"¿Qué acciones deben tomarse?"
+"Este shader ha sido modificado en el disco.\n"
+"¿Qué acción debe tomarse?"
#: editor/plugins/shader_editor_plugin.cpp scene/resources/material.cpp
msgid "Shader"
@@ -11610,9 +11526,8 @@ msgid "Manipulator Gizmo Opacity"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Show Viewport Rotation Gizmo"
-msgstr "Bloquear Rotación de Vista"
+msgstr "Mostrar Gizmo de Rotación del Viewport"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unnamed Gizmo"
@@ -11664,9 +11579,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometría inválida, no puede ser reemplazada por una malla."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Convert to MeshInstance2D"
-msgstr "Convertir a Mesh2D"
+msgstr "Convertir a MeshInstance2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -11769,6 +11683,11 @@ msgid "New Animation"
msgstr "Nueva Animación"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrar métodos"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Velocidad:"
@@ -12066,9 +11985,8 @@ msgstr ""
"¿Cerrar de todos modos?"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Type"
-msgstr "Eliminar Tile"
+msgstr "Eliminar Tipo"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -12112,14 +12030,12 @@ msgstr ""
"Añade más propiedades manualmente o impórtalas desde otro Theme."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Type"
-msgstr "Añadir Tipo de Elemento"
+msgstr "Añadir Tipo de Theme"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Theme Type"
-msgstr "Eliminar Remoto"
+msgstr "Eliminar Tipo de Theme"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -12566,55 +12482,46 @@ msgid "Clear Transform"
msgstr "Reestablecer Transformación"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Tile Map"
-msgstr "Dibujar TileMap"
+msgstr "Mapa de Tiles"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Palette Min Width"
-msgstr ""
+msgstr "Ancho Mínimo de la Paleta"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Palette Item H Separation"
-msgstr "Separador con nombre"
+msgstr "Separación del Elemento H de la Paleta"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Show Tile Names"
-msgstr "Mostrar Todos los Idiomas"
+msgstr "Mostrar Nombres de Tiles"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Show Tile Ids"
-msgstr "Mostrar Reglas"
+msgstr "Mostrar ID de los Tiles"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Sort Tiles By Name"
-msgstr "Ordenar archivos"
+msgstr "Ordenar Tiles por Nombre"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Bucket Fill Preview"
-msgstr "Bote de Relleno"
+msgstr "Vista previa del Bote de Relleno"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Editor Side"
-msgstr "Editor"
+msgstr "Lado del Editor"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Display Grid"
-msgstr "Mostrar Overdraw"
+msgstr "Mostrar Cuadrícula"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Axis Color"
-msgstr "Seleccionar Color"
+msgstr "Color de los Ejes"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Add Texture(s) to TileSet."
@@ -12953,7 +12860,6 @@ msgid "This property can't be changed."
msgstr "Esta propiedad no se puede cambiar."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Snap Options"
msgstr "Opciones de Ajuste"
@@ -12982,9 +12888,8 @@ msgid "Separation"
msgstr "Separación"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Tile"
-msgstr "Seleccionar"
+msgstr "Tiles Seleccionados"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/light_2d.cpp scene/2d/line_2d.cpp scene/2d/mesh_instance_2d.cpp
@@ -12993,14 +12898,12 @@ msgstr "Seleccionar"
#: scene/gui/nine_patch_rect.cpp scene/gui/texture_rect.cpp
#: scene/resources/material.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Texture"
-msgstr "Texto"
+msgstr "Textura"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tex Offset"
-msgstr "Desplazamiento de Byte"
+msgstr "Desplazamiento de Textura"
#: editor/plugins/tile_set_editor_plugin.cpp modules/csg/csg_shape.cpp
#: scene/2d/canvas_item.cpp scene/2d/particles_2d.cpp
@@ -13010,79 +12913,64 @@ msgstr "Material"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/canvas_item.cpp
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp scene/resources/style_box.cpp
-#, fuzzy
msgid "Modulate"
-msgstr "Rellenar"
+msgstr "Modular"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tile Mode"
-msgstr "Cambiar Modo"
+msgstr "Modo Tile"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Autotile Bitmask Mode"
-msgstr "Modo de Bitmask"
+msgstr "Modo Bitmask Automático"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Subtile Size"
-msgstr "Tamaño del Contorno"
+msgstr "Tamaño de Subtile"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Subtile Spacing"
-msgstr "Espaciado de Línea"
+msgstr "Espaciado de Subtile"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occluder Offset"
-msgstr "Crear Polígono Oclusor"
+msgstr "Desplazamiento del Oclusor"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation Offset"
-msgstr "Modo de Navegación"
+msgstr "Desplazamiento de Navegación"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Shape Offset"
-msgstr "Desplazamiento Base"
+msgstr "Desplazamiento del Shape"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Shape Transform"
-msgstr "Transformar"
+msgstr "Transformar Shape"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Collision"
-msgstr "Colisión"
+msgstr "Colisión Seleccionada"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Collision One Way"
-msgstr "Sólo selección"
+msgstr "Colisión Seleccionada en Una Dirección"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Collision One Way Margin"
-msgstr "Modo de Colisión"
+msgstr "Margen Seleccionado de Colisión en Una Dirección"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Navigation"
-msgstr "Navegación Visible"
+msgstr "Navegación Seleccionada"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Occlusion"
-msgstr "Seleccionar"
+msgstr "Oclusión Seleccionada"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tileset Script"
-msgstr "Filtrar scripts"
+msgstr "Script de Tileset"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "TileSet"
@@ -14293,9 +14181,8 @@ msgid ""
msgstr ""
#: editor/project_export.cpp
-#, fuzzy
msgid "More Info..."
-msgstr "Mover a..."
+msgstr "Más información..."
#: editor/project_export.cpp
msgid "Export PCK/Zip..."
@@ -14322,18 +14209,16 @@ msgid "ZIP File"
msgstr "Archivo ZIP"
#: editor/project_export.cpp
-#, fuzzy
msgid "Godot Project Pack"
-msgstr "Godot Game Pack"
+msgstr "Paquete de Proyectos de Godot"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
msgstr "Faltan plantillas de exportación para esta plataforma:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Project Export"
-msgstr "Fundadores del Proyecto"
+msgstr "Exportación del Proyecto"
#: editor/project_export.cpp
msgid "Manage Export Templates"
@@ -14648,7 +14533,6 @@ msgstr ""
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
#: editor/project_manager.cpp
-#, fuzzy
msgctxt "Application"
msgid "Project Manager"
msgstr "Administrador de Proyectos"
@@ -15456,14 +15340,12 @@ msgid "Another node already uses this unique name in the scene."
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Enable Scene Unique Name"
-msgstr "Nombre Único"
+msgstr "Activar Nombre Único de Escena"
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Disable Scene Unique Name"
-msgstr "Nombre Único"
+msgstr "Desactivar Nombre Único de Escena"
#: editor/scene_tree_dock.cpp
msgid "New Scene Root"
@@ -15638,18 +15520,16 @@ msgid "Clear Inheritance? (No Undo!)"
msgstr "¿Quieres limpiar la herencia? (No se puede deshacer)"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Show Scene Tree Root Selection"
-msgstr "Centrar Selección"
+msgstr "Mostrar Selección de la Raíz del Ãrbol de Escenas"
#: editor/scene_tree_dock.cpp
msgid "Derive Script Globals By Name"
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Use Favorites Root Selection"
-msgstr "Seleccionar Fotogramas"
+msgstr "Usar Selección de Raíces Favoritas"
#: editor/scene_tree_editor.cpp
msgid "Toggle Visible"
@@ -16108,23 +15988,20 @@ msgid "Change Particles AABB"
msgstr "Cambiar partículas AABB"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Reflection Probe"
-msgstr "Seleccionar Propiedad"
+msgstr "Sonda de Reflexión"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "Cambiar Alcance de la Sonda"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "GI Probe"
-msgstr "Calcular GI Probe"
+msgstr "Sonda GI"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Baked Indirect Light"
-msgstr "Iluminación indirecta"
+msgstr "Iluminación Indirecta Bakeada"
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
msgid "Change Sphere Shape Radius"
@@ -16155,24 +16032,20 @@ msgid "Change Ray Shape Length"
msgstr "Cambiar Longitud de la Forma del Rayo"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Edge"
-msgstr "Modo de Navegación"
+msgstr "Borde de Navegación"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Edge Disabled"
-msgstr "Modo de Navegación"
+msgstr "Borde de Navegación Desactivado"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Solid"
-msgstr "Modo de Navegación"
+msgstr "Navegación Sólida"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Solid Disabled"
-msgstr "Modo de Navegación"
+msgstr "Navegación Sólida Desactivada"
#: editor/spatial_editor_gizmos.cpp
msgid "Joint Body A"
@@ -16195,9 +16068,8 @@ msgid "Set Room Point Position"
msgstr "Establecer Posición del Room Point"
#: editor/spatial_editor_gizmos.cpp scene/3d/portal.cpp
-#, fuzzy
msgid "Portal Margin"
-msgstr "Asignar Margen"
+msgstr "Margen del Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Edge"
@@ -16216,15 +16088,13 @@ msgid "Portal Front"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Portal Back"
-msgstr "Retroceder"
+msgstr "Portal de Regreso"
#: editor/spatial_editor_gizmos.cpp scene/2d/light_occluder_2d.cpp
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Occluder"
-msgstr "Modo de Oclusión"
+msgstr "Oclusor"
#: editor/spatial_editor_gizmos.cpp
msgid "Set Occluder Sphere Radius"
@@ -16243,19 +16113,16 @@ msgid "Set Occluder Hole Point Position"
msgstr "Establecer posición del orificio del oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Polygon Front"
-msgstr "Crear Polígono Oclusor"
+msgstr "Frente del Polígono Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Polygon Back"
-msgstr "Crear Polígono Oclusor"
+msgstr "Posterior del Polígono Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Hole"
-msgstr "Crear Polígono Oclusor"
+msgstr "Orificio Oclusor"
#: main/main.cpp
msgid "Godot Physics"
@@ -16264,32 +16131,28 @@ msgstr ""
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
msgid "Use BVH"
-msgstr ""
+msgstr "Usar BVH"
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
-#, fuzzy
msgid "BVH Collision Margin"
-msgstr "Modo de Colisión"
+msgstr "Margen de Colisión BVH"
#: main/main.cpp
-#, fuzzy
msgid "Crash Handler"
-msgstr "Establecer Manipulador"
+msgstr "Manipulador de Colisiones"
#: main/main.cpp
-#, fuzzy
msgid "Multithreaded Server"
-msgstr "Establecer multinodo"
+msgstr "Servidor Multihilo"
#: main/main.cpp
msgid "RID Pool Prealloc"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Debugger stdout"
-msgstr "Depurador"
+msgstr "Depurador stdout"
#: main/main.cpp
msgid "Max Chars Per Second"
@@ -16320,14 +16183,12 @@ msgid "File Logging"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Enable File Logging"
-msgstr "Habilitar Filtrado"
+msgstr "Activar Registro de Archivos"
#: main/main.cpp
-#, fuzzy
msgid "Log Path"
-msgstr "Copiar Ruta"
+msgstr "Ruta del Registro"
#: main/main.cpp
msgid "Max Log Files"
@@ -16358,14 +16219,12 @@ msgid "Allow hiDPI"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "V-Sync"
-msgstr "Sincronizar"
+msgstr "Sincronización Vertical"
#: main/main.cpp
-#, fuzzy
msgid "Use V-Sync"
-msgstr "Usar Snap"
+msgstr "Usar Sincronización Vertical"
#: main/main.cpp
msgid "Per Pixel Transparency"
@@ -16380,23 +16239,20 @@ msgid "Intended Usage"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Framebuffer Allocation"
-msgstr "Seleccionar Fotogramas"
+msgstr "Asignación del Buffer de Imágenes"
#: main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Energy Saving"
-msgstr "Error al Guardar"
+msgstr "Ahorro de Energía"
#: main/main.cpp
msgid "Threads"
msgstr ""
#: main/main.cpp servers/physics_2d/physics_2d_server_wrap_mt.h
-#, fuzzy
msgid "Thread Model"
-msgstr "Cambiar Modo"
+msgstr "Modelo de Hilo"
#: main/main.cpp
msgid "Thread Safe BVH"
@@ -16408,25 +16264,21 @@ msgstr ""
#: main/main.cpp platform/javascript/export/export.cpp
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Orientation"
-msgstr "Documentación en línea"
+msgstr "Orientación"
#: main/main.cpp scene/gui/scroll_container.cpp scene/gui/text_edit.cpp
#: scene/main/scene_tree.cpp scene/register_scene_types.cpp
-#, fuzzy
msgid "Common"
-msgstr "Comunidad"
+msgstr "Común"
#: main/main.cpp
-#, fuzzy
msgid "Physics FPS"
-msgstr "Fotogramas de Física %"
+msgstr "Física FPS"
#: main/main.cpp
-#, fuzzy
msgid "Force FPS"
-msgstr "Forzar Push"
+msgstr "Forzar FPS"
#: main/main.cpp
msgid "Enable Pause Aware Picking"
@@ -16455,19 +16307,16 @@ msgid "Verbose stdout"
msgstr ""
#: main/main.cpp scene/main/scene_tree.cpp scene/resources/multimesh.cpp
-#, fuzzy
msgid "Physics Interpolation"
-msgstr "Modo de Interpolación"
+msgstr "Interpolación de Física"
#: main/main.cpp
-#, fuzzy
msgid "Enable Warnings"
-msgstr "Habilitar Filtrado"
+msgstr "Activar Advertencias"
#: main/main.cpp
-#, fuzzy
msgid "Frame Delay Msec"
-msgstr "Seleccionar Fotogramas"
+msgstr "Retraso de los Fotogramas Msec"
#: main/main.cpp
msgid "Low Processor Mode"
@@ -16486,14 +16335,12 @@ msgid "Hide Home Indicator"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Input Devices"
-msgstr "Todos los Dispositivos"
+msgstr "Dispositivos de Entrada"
#: main/main.cpp
-#, fuzzy
msgid "Pointing"
-msgstr "Punto"
+msgstr "Apuntador"
#: main/main.cpp
msgid "Touch Delay"
@@ -16504,21 +16351,18 @@ msgid "GLES3"
msgstr ""
#: main/main.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Shaders"
-msgstr "Shader"
+msgstr "Shaders"
#: main/main.cpp
-#, fuzzy
msgid "Debug Shader Fallbacks"
-msgstr "Forzar Shader Fallbacks"
+msgstr "Depurar Fallbacks de Shader"
#: main/main.cpp scene/3d/baked_lightmap.cpp scene/3d/camera.cpp
#: scene/3d/world_environment.cpp scene/main/scene_tree.cpp
#: scene/resources/world.cpp
-#, fuzzy
msgid "Environment"
-msgstr "Ver Entorno"
+msgstr "Entorno"
#: main/main.cpp
msgid "Default Clear Color"
@@ -16529,9 +16373,8 @@ msgid "Boot Splash"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Show Image"
-msgstr "Mostrar Huesos"
+msgstr "Mostrar Imagen"
#: main/main.cpp
msgid "Image"
@@ -16546,14 +16389,12 @@ msgid "Use Filter"
msgstr "Usar Filtro"
#: main/main.cpp scene/resources/style_box.cpp
-#, fuzzy
msgid "BG Color"
-msgstr "Colores"
+msgstr "Color de Fondo"
#: main/main.cpp
-#, fuzzy
msgid "macOS Native Icon"
-msgstr "Establecer Icono de Tile"
+msgstr "Icono Nativo de macOS"
#: main/main.cpp
msgid "Windows Native Icon"
@@ -16576,14 +16417,12 @@ msgid "Emulate Mouse From Touch"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Mouse Cursor"
-msgstr "Botón del Mouse"
+msgstr "Cursor del Mouse"
#: main/main.cpp
-#, fuzzy
msgid "Custom Image"
-msgstr "CustomNode"
+msgstr "Imagen Personalizada"
#: main/main.cpp
msgid "Custom Image Hotspot"
@@ -16594,14 +16433,12 @@ msgid "Tooltip Position Offset"
msgstr "Offset de la Posición del Tooltip"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
-#, fuzzy
msgid "Debugger Agent"
-msgstr "Depurador"
+msgstr "Agente de Depuración"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
-#, fuzzy
msgid "Wait For Debugger"
-msgstr "Depurador"
+msgstr "Esperar al Depurador"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
msgid "Wait Timeout"
@@ -16616,20 +16453,17 @@ msgid "Unhandled Exception Policy"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Main Loop Type"
-msgstr "Buscar Tipo de Nodo"
+msgstr "Tipo de Bucle Principal"
#: main/main.cpp scene/gui/texture_progress.cpp
#: scene/gui/viewport_container.cpp
-#, fuzzy
msgid "Stretch"
-msgstr "Buscar"
+msgstr "Estirar"
#: main/main.cpp
-#, fuzzy
msgid "Aspect"
-msgstr "Inspector"
+msgstr "Aspecto"
#: main/main.cpp
msgid "Shrink"
@@ -16640,14 +16474,12 @@ msgid "Auto Accept Quit"
msgstr ""
#: main/main.cpp scene/main/scene_tree.cpp
-#, fuzzy
msgid "Quit On Go Back"
-msgstr "Retroceder"
+msgstr "Salir y Regresar"
#: main/main.cpp scene/main/viewport.cpp
-#, fuzzy
msgid "Snap Controls To Pixels"
-msgstr "Ajustar a los Lados del Nodo"
+msgstr "Ajustar Controles a Píxeles"
#: main/main.cpp
msgid "Dynamic Fonts"
@@ -16682,35 +16514,30 @@ msgid "Change Torus Outer Radius"
msgstr "Cambiar Radio Externo de Torus"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Operation"
-msgstr "Opciones"
+msgstr "Operación"
#: modules/csg/csg_shape.cpp
msgid "Calculate Tangents"
msgstr ""
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Use Collision"
-msgstr "Colisión"
+msgstr "Usar Colisión"
#: modules/csg/csg_shape.cpp servers/physics_2d_server.cpp
-#, fuzzy
msgid "Collision Layer"
-msgstr "Modo de Colisión"
+msgstr "Capa de Colisión"
#: modules/csg/csg_shape.cpp scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp
#: scene/3d/ray_cast.cpp scene/3d/spring_arm.cpp
#: scene/resources/navigation_mesh.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collision Mask"
-msgstr "Modo de Colisión"
+msgstr "Máscara de Colisión"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Invert Faces"
-msgstr "Convertir Mayúsculas/Minúsculas"
+msgstr "Invertir Caras"
#: modules/csg/csg_shape.cpp scene/2d/navigation_agent_2d.cpp
#: scene/2d/navigation_obstacle_2d.cpp scene/3d/navigation_agent.cpp
@@ -16728,33 +16555,28 @@ msgid "Radial Segments"
msgstr "Segmentos Radiales"
#: modules/csg/csg_shape.cpp scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Rings"
-msgstr "Advertencias"
+msgstr "Anillos"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Smooth Faces"
-msgstr "Suavizado"
+msgstr "Caras Suaves"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Sides"
-msgstr "Mostrar Guías"
+msgstr "Lados"
#: modules/csg/csg_shape.cpp
msgid "Cone"
msgstr ""
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Inner Radius"
-msgstr "Cambiar Radio Interno de Torus"
+msgstr "Radio Interior"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Outer Radius"
-msgstr "Cambiar Radio Externo de Torus"
+msgstr "Radio Exterior"
#: modules/csg/csg_shape.cpp
msgid "Ring Sides"
@@ -16763,9 +16585,8 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
#: scene/3d/collision_polygon.cpp
-#, fuzzy
msgid "Polygon"
-msgstr "Polígonos"
+msgstr "Polígono"
#: modules/csg/csg_shape.cpp
msgid "Spin Degrees"
@@ -16776,14 +16597,12 @@ msgid "Spin Sides"
msgstr ""
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path Node"
-msgstr "Pegar Nodos"
+msgstr "Ruta del Nodo"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path Interval Type"
-msgstr "Crear Vértice Interno"
+msgstr "Tipo de Intervalo de Ruta"
#: modules/csg/csg_shape.cpp
msgid "Path Interval"
@@ -16798,14 +16617,12 @@ msgid "Path Rotation"
msgstr "Rotación de Trayectoria"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path Local"
-msgstr "Crear Local"
+msgstr "Ruta Local"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path Continuous U"
-msgstr "Continuo"
+msgstr "Ruta Continua U"
#: modules/csg/csg_shape.cpp
msgid "Path U Distance"
@@ -16816,24 +16633,20 @@ msgid "Path Joined"
msgstr "Ruta Unida"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Compression Mode"
-msgstr "Modo de Colisión"
+msgstr "Modo de Compresión"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Transfer Channel"
-msgstr "Cambio de Transformación"
+msgstr "Canal de Transferencia"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Channel Count"
-msgstr "Instanciar"
+msgstr "Conteo de Canales"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Always Ordered"
-msgstr "Mostrar Siempre la Cuadrícula"
+msgstr "Siempre Ordenado"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "Server Relay"
@@ -16848,9 +16661,8 @@ msgid "DTLS Hostname"
msgstr ""
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Use DTLS"
-msgstr "Usar Snap"
+msgstr "Usar DTLS"
#: modules/fbx/editor_scene_importer_fbx.cpp
msgid "FBX"
@@ -16865,24 +16677,21 @@ msgid "Config File"
msgstr "Archivo de Configuración"
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Load Once"
-msgstr "Cargar Recurso"
+msgstr "Cargar Una Vez"
#: modules/gdnative/gdnative.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Singleton"
-msgstr "Esqueleto"
+msgstr "Singleton"
#: modules/gdnative/gdnative.cpp
msgid "Symbol Prefix"
msgstr "Prefijo de Símbolo"
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Reloadable"
-msgstr "Recargar"
+msgstr "Recargable"
#: modules/gdnative/gdnative.cpp
#: modules/gdnative/gdnative_library_singleton_editor.cpp
@@ -16947,9 +16756,8 @@ msgid "Script Class"
msgstr "Clase del Script"
#: modules/gdnative/nativescript/nativescript.cpp
-#, fuzzy
msgid "Icon Path"
-msgstr "Foco en Ruta"
+msgstr "Ruta del Icono"
#: modules/gdnative/register_types.cpp
msgid "GDNative"
@@ -16957,18 +16765,16 @@ msgstr "GDNative"
#: modules/gdscript/editor/gdscript_highlighter.cpp
#: modules/gdscript/gdscript.cpp
-#, fuzzy
msgid "GDScript"
-msgstr "Script"
+msgstr "GDScript"
#: modules/gdscript/editor/gdscript_highlighter.cpp
msgid "Function Definition Color"
msgstr ""
#: modules/gdscript/editor/gdscript_highlighter.cpp
-#, fuzzy
msgid "Node Path Color"
-msgstr "Copiar Ruta del Nodo"
+msgstr "Color de la Ruta del Nodo"
#: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp
msgid "Max Call Stack"
@@ -17031,9 +16837,8 @@ msgid "Language Server"
msgstr "Servidor de Lenguaje"
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Enable Smart Resolve"
-msgstr "No se puede resolver"
+msgstr "Activar Smart Resolve"
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Show Native Symbols In Editor"
@@ -17052,42 +16857,36 @@ msgid "Export GLTF..."
msgstr "Exportar GLTF..."
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Buffer View"
-msgstr "Vista Trasera"
+msgstr "Vista del Buffer"
#: modules/gltf/gltf_accessor.cpp modules/gltf/gltf_buffer_view.cpp
msgid "Byte Offset"
msgstr "Desplazamiento de Byte"
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Component Type"
-msgstr "Componentes"
+msgstr "Tipo de Componente"
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Normalized"
-msgstr "Formato"
+msgstr "Normalizado"
#: modules/gltf/gltf_accessor.cpp
msgid "Count"
msgstr "Cuenta"
#: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Min"
-msgstr "MiB"
+msgstr "Min"
#: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Max"
-msgstr "Mix"
+msgstr "Max"
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Sparse Count"
-msgstr "Instanciar"
+msgstr "Recuento Parcial"
#: modules/gltf/gltf_accessor.cpp
msgid "Sparse Indices Buffer View"
@@ -17110,23 +16909,20 @@ msgid "Sparse Values Byte Offset"
msgstr ""
#: modules/gltf/gltf_buffer_view.cpp
-#, fuzzy
msgid "Buffer"
-msgstr "Vista Trasera"
+msgstr "Buffer"
#: modules/gltf/gltf_buffer_view.cpp
-#, fuzzy
msgid "Byte Length"
-msgstr "Theme Predeterminado"
+msgstr "Longitud de Bytes"
#: modules/gltf/gltf_buffer_view.cpp
msgid "Byte Stride"
msgstr ""
#: modules/gltf/gltf_buffer_view.cpp
-#, fuzzy
msgid "Indices"
-msgstr "Todos los Dispositivos"
+msgstr "Ãndices"
#: modules/gltf/gltf_camera.cpp
msgid "FOV Size"
@@ -17137,9 +16933,8 @@ msgid "Zfar"
msgstr ""
#: modules/gltf/gltf_camera.cpp
-#, fuzzy
msgid "Znear"
-msgstr "Lineal"
+msgstr "Znear"
#: modules/gltf/gltf_light.cpp scene/2d/canvas_modulate.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/light_2d.cpp scene/2d/polygon_2d.cpp
@@ -17149,9 +16944,8 @@ msgstr "Lineal"
#: scene/resources/environment.cpp scene/resources/material.cpp
#: scene/resources/particles_material.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp
-#, fuzzy
msgid "Color"
-msgstr "Colores"
+msgstr "Color"
#: modules/gltf/gltf_light.cpp scene/3d/reflection_probe.cpp
#: scene/resources/environment.cpp
@@ -17159,9 +16953,8 @@ msgid "Intensity"
msgstr ""
#: modules/gltf/gltf_light.cpp scene/2d/light_2d.cpp scene/3d/light.cpp
-#, fuzzy
msgid "Range"
-msgstr "Cambiar"
+msgstr "Rango"
#: modules/gltf/gltf_light.cpp
msgid "Inner Cone Angle"
@@ -17172,42 +16965,36 @@ msgid "Outer Cone Angle"
msgstr ""
#: modules/gltf/gltf_mesh.cpp
-#, fuzzy
msgid "Blend Weights"
-msgstr "Calcular Lightmaps"
+msgstr "Mezcla de Pesos"
#: modules/gltf/gltf_mesh.cpp
msgid "Instance Materials"
msgstr "Materiales de Instancia"
#: modules/gltf/gltf_node.cpp scene/3d/skeleton.cpp
-#, fuzzy
msgid "Parent"
-msgstr "Reemparentar"
+msgstr "Padre"
#: modules/gltf/gltf_node.cpp
-#, fuzzy
msgid "Xform"
-msgstr "Plataforma"
+msgstr "Xform"
#: modules/gltf/gltf_node.cpp scene/3d/mesh_instance.cpp
msgid "Skin"
msgstr ""
#: modules/gltf/gltf_node.cpp scene/3d/spatial.cpp
-#, fuzzy
msgid "Translation"
-msgstr "Traducciones"
+msgstr "Traducción"
#: modules/gltf/gltf_node.cpp
-#, fuzzy
msgid "Children"
-msgstr "Hijos Editables"
+msgstr "Hijos"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Joints"
-msgstr "Punto"
+msgstr "Articulaciones"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
msgid "Roots"
@@ -17218,28 +17005,24 @@ msgid "Unique Names"
msgstr ""
#: modules/gltf/gltf_skeleton.cpp
-#, fuzzy
msgid "Godot Bone Node"
-msgstr "Obtener Nodo de Escena"
+msgstr "Nodo de Huesos de Godot"
#: modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Skin Root"
-msgstr "Nueva Raíz de Escena"
+msgstr "Raíz de la Skin"
#: modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Joints Original"
-msgstr "Foco en Origen"
+msgstr "Articulaciones Originales"
#: modules/gltf/gltf_skin.cpp
msgid "Inverse Binds"
msgstr ""
#: modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Non Joints"
-msgstr "Mover Unión"
+msgstr "Sin Articulaciones"
#: modules/gltf/gltf_skin.cpp
msgid "Joint I To Bone I"
@@ -17278,28 +17061,24 @@ msgid "Json"
msgstr ""
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Major Version"
-msgstr "Versión"
+msgstr "Versión Mayor"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Minor Version"
-msgstr "Versión"
+msgstr "Versión Menor"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "GLB Data"
-msgstr "Con Datos"
+msgstr "Datos GLB"
#: modules/gltf/gltf_state.cpp
msgid "Use Named Skin Binds"
msgstr ""
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Buffer Views"
-msgstr "Vista Trasera"
+msgstr "Vistas del Buffer"
#: modules/gltf/gltf_state.cpp
msgid "Accessors"
@@ -17310,15 +17089,13 @@ msgid "Scene Name"
msgstr "Nombre de la Escena"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Root Nodes"
-msgstr "Nombre del nodo raíz"
+msgstr "Nodos Raíz"
#: modules/gltf/gltf_state.cpp scene/2d/particles_2d.cpp
#: scene/gui/texture_button.cpp scene/gui/texture_progress.cpp
-#, fuzzy
msgid "Textures"
-msgstr "Características"
+msgstr "Texturas"
#: modules/gltf/gltf_state.cpp platform/uwp/export/export.cpp
msgid "Images"
@@ -17329,70 +17106,60 @@ msgid "Cameras"
msgstr ""
#: modules/gltf/gltf_state.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Lights"
-msgstr "Luz"
+msgstr "Luces"
#: modules/gltf/gltf_state.cpp
msgid "Unique Animation Names"
msgstr "Nombres Únicos de Animación"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Skeletons"
-msgstr "Esqueleto"
+msgstr "Esqueletos"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Skeleton To Node"
-msgstr "Selecciona un Nodo"
+msgstr "Esqueleto a Nodo"
#: modules/gltf/gltf_state.cpp
msgid "Animations"
msgstr "Animaciones"
#: modules/gltf/gltf_texture.cpp
-#, fuzzy
msgid "Src Image"
-msgstr "Mostrar Huesos"
+msgstr "Imagen de Origen"
#: modules/gridmap/grid_map.cpp
msgid "Mesh Library"
msgstr "Librería de Mallas"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Physics Material"
-msgstr "Fotogramas de Física %"
+msgstr "Material de Física"
#: modules/gridmap/grid_map.cpp scene/3d/visual_instance.cpp
-#, fuzzy
msgid "Use In Baked Light"
-msgstr "Calcular Lightmaps"
+msgstr "Uso en Luz Bakeada"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
msgid "Cell"
msgstr ""
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Octant Size"
-msgstr "Vista Frontal"
+msgstr "Tamaño del Octante"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center X"
-msgstr "Centro"
+msgstr "Centro X"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center Y"
-msgstr "Centro"
+msgstr "Centro Y"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center Z"
-msgstr "Centro"
+msgstr "Centro Z"
#: modules/gridmap/grid_map.cpp scene/2d/collision_object_2d.cpp
#: scene/2d/tile_map.cpp scene/3d/collision_object.cpp scene/3d/soft_body.cpp
@@ -17401,17 +17168,15 @@ msgid "Mask"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#, fuzzy
msgid "Bake Navigation"
-msgstr "Navegación"
+msgstr "Bakear Navegación"
#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
#: scene/3d/navigation_mesh_instance.cpp
-#, fuzzy
msgid "Navigation Layers"
-msgstr "Modo de Navegación"
+msgstr "Capas de Navegación"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -17571,9 +17336,8 @@ msgid "Plotting lightmaps"
msgstr "Trazar lightmaps"
#: modules/lightmapper_cpu/register_types.cpp
-#, fuzzy
msgid "CPU Lightmapper"
-msgstr "Calcular Lightmaps"
+msgstr "CPU Lightmapper"
#: modules/lightmapper_cpu/register_types.cpp
msgid "Low Quality Ray Count"
@@ -17607,14 +17371,12 @@ msgid "IOD"
msgstr ""
#: modules/mobile_vr/mobile_vr_interface.cpp
-#, fuzzy
msgid "Display Width"
-msgstr "Mostrar Wireframe"
+msgstr "Ancho de Pantalla"
#: modules/mobile_vr/mobile_vr_interface.cpp
-#, fuzzy
msgid "Display To Lens"
-msgstr "Mostrar Sin Sombreado"
+msgstr "Pantalla a Lente"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "Oversample"
@@ -17637,9 +17399,8 @@ msgid "Build Solution"
msgstr "Crear Solución"
#: modules/mono/editor/csharp_project.cpp
-#, fuzzy
msgid "Auto Update Project"
-msgstr "Proyecto Sin Nombre"
+msgstr "Actualización Automática del Proyecto"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -17741,9 +17502,8 @@ msgid "Period"
msgstr ""
#: modules/opensimplex/open_simplex_noise.cpp
-#, fuzzy
msgid "Persistence"
-msgstr "Perspectiva"
+msgstr "Persistencia"
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Lacunarity"
@@ -17754,9 +17514,8 @@ msgid "Subject"
msgstr ""
#: modules/regex/regex.cpp
-#, fuzzy
msgid "Names"
-msgstr "Nombre"
+msgstr "Nombres"
#: modules/regex/regex.cpp
msgid "Strings"
@@ -17775,32 +17534,28 @@ msgid "Discover IPv6"
msgstr ""
#: modules/upnp/upnp_device.cpp
-#, fuzzy
msgid "Description URL"
-msgstr "Descripción"
+msgstr "Descripción URL"
#: modules/upnp/upnp_device.cpp
-#, fuzzy
msgid "Service Type"
-msgstr "Establecer Tipo de la Variable"
+msgstr "Tipo de Servicio"
#: modules/upnp/upnp_device.cpp
msgid "IGD Control URL"
msgstr ""
#: modules/upnp/upnp_device.cpp
-#, fuzzy
msgid "IGD Service Type"
-msgstr "Establecer Tipo de la Variable"
+msgstr "Tipo de Servicio IGD"
#: modules/upnp/upnp_device.cpp
msgid "IGD Our Addr"
msgstr ""
#: modules/upnp/upnp_device.cpp
-#, fuzzy
msgid "IGD Status"
-msgstr "Estado"
+msgstr "Estado del IGD"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -17841,9 +17596,8 @@ msgid "Stack overflow with stack depth:"
msgstr "Desbordamiento de pila con profundidad de pila:"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Visual Script"
-msgstr "Buscar en VisualScript"
+msgstr "Visual Script"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Signal Arguments"
@@ -18173,14 +17927,12 @@ msgid "Return"
msgstr "Regresar"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Return Enabled"
-msgstr "Ejecutable"
+msgstr "Retorno Activado"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Return Type"
-msgstr "Regresar"
+msgstr "Tipo de Retorno"
#: modules/visual_script/visual_script_flow_control.cpp
#: scene/resources/visual_shader_nodes.cpp
@@ -18228,9 +17980,8 @@ msgid "in order:"
msgstr "en orden:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Steps"
-msgstr "Paso"
+msgstr "Pasos"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Switch"
@@ -18250,9 +18001,8 @@ msgstr "¿Es %s?"
#: modules/visual_script/visual_script_flow_control.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Base Script"
-msgstr "Nuevo Script"
+msgstr "Script Base"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
@@ -18264,36 +18014,31 @@ msgstr "Sobre Sí Mismo"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Call Mode"
-msgstr "Modo de Escalado"
+msgstr "Modo de Llamada"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Type"
-msgstr "Tipo Base"
+msgstr "Tipo Básico"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Node Path"
-msgstr "Copiar Ruta del Nodo"
+msgstr "Ruta del Nodo"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Use Default Args"
-msgstr "Restablecer Valores por Defecto"
+msgstr "Usar Argumentos por Defecto"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Validate"
msgstr "Validar"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "RPC Call Mode"
-msgstr "Modo de Escalado"
+msgstr "Modo de Llamada RPC"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Subtract %s"
@@ -18332,14 +18077,12 @@ msgid "BitXor %s"
msgstr "BitXor %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Set Mode"
-msgstr "Modo de Selección"
+msgstr "Modo de Ajuste"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Assign Op"
-msgstr "Asignar"
+msgstr "Asignar Op"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -18356,9 +18099,8 @@ msgid "Base object is not a Node!"
msgstr "¡El objeto base no es un nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead to Node!"
-msgstr "¡La ruta no apunta a un Nodo!"
+msgstr "¡La ruta no lleva al nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
@@ -18374,9 +18116,8 @@ msgstr "Ordenar Array"
#: modules/visual_script/visual_script_nodes.cpp scene/resources/material.cpp
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Operator"
-msgstr "Iterador"
+msgstr "Operador"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Invalid argument of type:"
@@ -18391,9 +18132,8 @@ msgid "a if cond, else b"
msgstr "a si cond, sino b"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Var Name"
-msgstr "Nombre"
+msgstr "Nombre de la Variable"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script:"
@@ -18518,9 +18258,8 @@ msgid "%s sec(s)"
msgstr "%s seg(s)"
#: modules/visual_script/visual_script_yield_nodes.cpp scene/main/timer.cpp
-#, fuzzy
msgid "Wait Time"
-msgstr "Dibujar Tile"
+msgstr "Tiempo de Espera"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "WaitSignal"
@@ -18535,18 +18274,16 @@ msgid "WaitInstanceSignal"
msgstr "WaitInstanceSignal"
#: modules/webrtc/webrtc_data_channel.cpp
-#, fuzzy
msgid "Write Mode"
-msgstr "Modo de Prioridad"
+msgstr "Modo de Escritura"
#: modules/webrtc/webrtc_data_channel.h
msgid "WebRTC"
msgstr ""
#: modules/webrtc/webrtc_data_channel.h
-#, fuzzy
msgid "Max Channel In Buffer (KB)"
-msgstr "Tamaño del buffer del índice del polígono del lienzo (KB)"
+msgstr "Buffer de Canal Máximo (KB)"
#: modules/websocket/websocket_client.cpp
msgid "Verify SSL"
@@ -18557,59 +18294,52 @@ msgid "Trusted SSL Certificate"
msgstr ""
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "WebSocket Client"
-msgstr "Red de Pares"
+msgstr "Cliente WebSocket"
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "Max In Buffer (KB)"
-msgstr "Tamaño Máximo (KB)"
+msgstr "Buffer de Entrada Máximo (KB)"
#: modules/websocket/websocket_macros.h
msgid "Max In Packets"
msgstr ""
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "Max Out Buffer (KB)"
-msgstr "Tamaño Máximo (KB)"
+msgstr "Buffer de Salida Máximo (KB)"
#: modules/websocket/websocket_macros.h
msgid "Max Out Packets"
msgstr ""
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "WebSocket Server"
-msgstr "Red de Pares"
+msgstr "Servidor WebSocket"
#: modules/websocket/websocket_server.cpp
msgid "Bind IP"
msgstr ""
#: modules/websocket/websocket_server.cpp
-#, fuzzy
msgid "Private Key"
-msgstr "Ruta de la Clave Privada SSH"
+msgstr "Clave Privada"
#: modules/websocket/websocket_server.cpp platform/javascript/export/export.cpp
msgid "SSL Certificate"
msgstr ""
#: modules/websocket/websocket_server.cpp
-#, fuzzy
msgid "CA Chain"
-msgstr "Reestrablecer cadena IK"
+msgstr "Cadena CA"
#: modules/websocket/websocket_server.cpp
msgid "Handshake Timeout"
msgstr "Tiempo de Espera del Handshake"
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "Session Mode"
-msgstr "Modo de Región"
+msgstr "Modo de Sesión"
#: modules/webxr/webxr_interface.cpp
msgid "Required Features"
@@ -18628,28 +18358,24 @@ msgid "Reference Space Type"
msgstr ""
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "Visibility State"
-msgstr "Cambiar Visibilidad"
+msgstr "Estado de Visibilidad"
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "Bounds Geometry"
-msgstr "Reintentar"
+msgstr "Límites Geométricos"
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "XR Standard Mapping"
-msgstr "Ajuste Inteligente"
+msgstr "Mapeo Estándar XR"
#: platform/android/export/export.cpp
msgid "Android SDK Path"
msgstr ""
#: platform/android/export/export.cpp
-#, fuzzy
msgid "Debug Keystore"
-msgstr "Depurador"
+msgstr "Debug Keystore"
#: platform/android/export/export.cpp
msgid "Debug Keystore User"
@@ -18711,84 +18437,72 @@ msgid "The package must have at least one '.' separator."
msgstr "El paquete debe tener al menos un '.' como separador."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Custom Build"
-msgstr "CustomNode"
+msgstr "Build Personalizada"
#: platform/android/export/export_plugin.cpp
msgid "Use Custom Build"
-msgstr ""
+msgstr "Usar Compilación Personalizada"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Export Format"
-msgstr "Ruta de Exportación"
+msgstr "Formato de Exportación"
#: platform/android/export/export_plugin.cpp
msgid "Min SDK"
msgstr "SDK Mínimo"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Target SDK"
-msgstr "Objetivo de FPS"
+msgstr "SDK de Destino"
#: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp
-#, fuzzy
msgid "Architectures"
-msgstr "Añadir una entrada de arquitectura"
+msgstr "Arquitecturas"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Keystore"
-msgstr "Depurador"
+msgstr "Keystore"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Debug User"
-msgstr "Depurador"
+msgstr "Usuario de Depuración"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
-#, fuzzy
msgid "Debug Password"
-msgstr "Contraseña"
+msgstr "Contraseña de Depuración"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Release User"
-msgstr "Release"
+msgstr "Usuario de Release"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Release Password"
-msgstr "Contraseña"
+msgstr "Contraseña de Release"
#: platform/android/export/export_plugin.cpp
msgid "One Click Deploy"
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Clear Previous Install"
-msgstr "Inspeccionar Instancia Anterior"
+msgstr "Limpiar Instalación Previa"
#: platform/android/export/export_plugin.cpp
msgid "Code"
msgstr ""
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
-#, fuzzy
msgid "Package"
-msgstr "Empaquetando"
+msgstr "Paquete"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
msgid "Unique Name"
msgstr "Nombre Único"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signed"
-msgstr "Señal"
+msgstr "Firmado"
#: platform/android/export/export_plugin.cpp
msgid "Classify As Game"
@@ -18799,33 +18513,28 @@ msgid "Retain Data On Uninstall"
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exclude From Recents"
-msgstr "Eliminar Nodos"
+msgstr "Excluir de los Recientes"
#: platform/android/export/export_plugin.cpp
msgid "Graphics"
msgstr "Gráficos"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "OpenGL Debug"
-msgstr "Abrir"
+msgstr "Depuración de OpenGL"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "XR Features"
-msgstr "Características"
+msgstr "Características del XR"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "XR Mode"
-msgstr "Modo desplazamiento lateral"
+msgstr "Modo XR"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Hand Tracking"
-msgstr "Empaquetando"
+msgstr "Seguimiento de Manos"
#: platform/android/export/export_plugin.cpp
msgid "Hand Tracking Frequency"
@@ -18836,71 +18545,60 @@ msgid "Passthrough"
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Immersive Mode"
-msgstr "Modo de Prioridad"
+msgstr "Modo Inmersivo"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Support Small"
-msgstr "Soporte"
+msgstr "Soporte Pequeño"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Support Normal"
-msgstr "Soporte"
+msgstr "Soporte Normal"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Support Large"
-msgstr "Soporte"
+msgstr "Soporte Grande"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Support Xlarge"
-msgstr "Soporte"
+msgstr "Soporte Xlarge"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "User Data Backup"
-msgstr "Interfaz de usuario"
+msgstr "Backup de Datos del Usuario"
#: platform/android/export/export_plugin.cpp
msgid "Allow"
msgstr ""
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
-#, fuzzy
msgid "Command Line"
-msgstr "Command"
+msgstr "Línea de Comandos"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
msgid "Extra Args"
msgstr "Argumentos extras"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "APK Expansion"
-msgstr "Expresión"
+msgstr "Expansión del APK"
#: platform/android/export/export_plugin.cpp
msgid "Salt"
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Public Key"
-msgstr "Ruta de la clave pública SSH"
+msgstr "Clave Pública"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Permissions"
-msgstr "Máscara de Emisión"
+msgstr "Permisos"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Custom Permissions"
-msgstr "Reproducir Escena Personalizada"
+msgstr "Permisos Personalizados"
#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
@@ -19029,34 +18727,33 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
-msgstr "\"Use Custom Build\" debe estar activado para usar los plugins."
+msgstr ""
+"\"Usar Compilación Personalizada\" debe estar activado para usar los plugins."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" "
"or \"OpenXR\"."
msgstr ""
-"\"Hand Tracking\" solo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
-"VrApi\" u \"OpenXR\"."
+"\"Seguimiento de Manos\" solo es válido cuando el \"Modo XR\" es \"Oculus "
+"Mobile VrApi\" u \"OpenXR\"."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"."
-msgstr "\"Passthrough\" solo es válido cuando \"Xr Mode\" es \"OpenXR\"."
+msgstr "\"Passthrough\" solo es válido cuando el \"Modo XR\" es \"OpenXR\"."
#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado."
+"\"Exportar AAB\" solo es válido cuando \"Usar Compilación Personalizada\" "
+"está activado."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled."
msgstr ""
-"Cambiar el \"Min Sdk\" solo es válido cuando \"Use Custom Build\" está "
-"activado."
+"\"Min SDK\" solo puede sobrescribirse cuando está activada la opción \"Usar "
+"Compilación Personalizada\"."
#: platform/android/export/export_plugin.cpp
msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid."
@@ -19069,36 +18766,36 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled."
msgstr ""
-"Cambiar el \"Target Sdk\" solo es válido cuando \"Use Custom Build\" está "
-"activado."
+"\"SDK de Destino\" solo se puede sobrescribir cuando \"Usar Compilación "
+"Personalizada\" está activado."
#: platform/android/export/export_plugin.cpp
msgid ""
"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid."
msgstr ""
+"\"SDK de Destino\" debería ser un entero válido, pero obtuvo \"%s\" inválido."
#: platform/android/export/export_plugin.cpp
msgid ""
"\"Target SDK\" %d is higher than the default version %d. This may work, but "
"wasn't tested and may be unstable."
msgstr ""
+"\"SDK de Destino\" %d es superior a la versión por defecto %d. Podría "
+"funcionar, pero no se ha probado y puede ser inestable."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version."
msgstr ""
-"La versión de \"Target Sdk\" debe ser mayor o igual que la versión de \"Min "
-"Sdk\"."
+"La versión \"SDK de Destino\" debe ser mayor o igual a la versión \"Min "
+"SDK\"."
#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Code Signing"
-msgstr "Firma de código DMG"
+msgstr "Firma del Código"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -19328,9 +19025,8 @@ msgid "Code Sign Identity Debug"
msgstr ""
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Export Method Debug"
-msgstr "Exportar Con Depuración"
+msgstr "Exportar Método de Depuración"
#: platform/iphone/export/export.cpp
msgid "Provisioning Profile UUID Release"
@@ -19357,39 +19053,33 @@ msgid "Identifier"
msgstr "Identificador"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Signature"
-msgstr "Señal"
+msgstr "Firma"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Short Version"
-msgstr "Versión"
+msgstr "Versión Corta"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Copyright"
-msgstr "Superior Derecha"
+msgstr "Copyright"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Capabilities"
-msgstr "Capitalizar Propiedades"
+msgstr "Capacidades"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Access Wi-Fi"
-msgstr "Acceso"
+msgstr "Acceso Wi-Fi"
#: platform/iphone/export/export.cpp
msgid "Push Notifications"
msgstr "Notificaciones Push"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "User Data"
-msgstr "Interfaz de usuario"
+msgstr "Datos de Usuario"
#: platform/iphone/export/export.cpp
msgid "Accessible From Files App"
@@ -19400,24 +19090,20 @@ msgid "Accessible From iTunes Sharing"
msgstr ""
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Privacy"
-msgstr "Ruta de la Clave Privada SSH"
+msgstr "Privacidad"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Camera Usage Description"
-msgstr "Descripción"
+msgstr "Descripción del Uso de la Cámara"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Microphone Usage Description"
-msgstr "Descripciones de Propiedades"
+msgstr "Descripción del Uso del Micrófono"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Photolibrary Usage Description"
-msgstr "Descripciones de Propiedades"
+msgstr "Descripción del Uso de la Fotolibrería"
#: platform/iphone/export/export.cpp
msgid "iPhone 120 X 120"
@@ -19460,40 +19146,33 @@ msgid "Use Launch Screen Storyboard"
msgstr ""
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Image Scale Mode"
-msgstr "Modo de Escalado"
+msgstr "Modo de Escalado de Imagen"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Custom Image @2x"
-msgstr "CustomNode"
+msgstr "Imagen Personalizada @2x"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Custom Image @3x"
-msgstr "CustomNode"
+msgstr "Imagen Personalizada @3x"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Use Custom BG Color"
-msgstr "CustomNode"
+msgstr "Usar Color de Fondo Personalizado"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Custom BG Color"
-msgstr "CustomNode"
+msgstr "Color de Fondo Personalizado"
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Prepare Templates"
-msgstr "Administrar Plantillas"
+msgstr "Preparar Plantillas"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Export template not found."
-msgstr "Plantilla release personalizada no encontrada."
+msgstr "No se ha encontrado la plantilla de exportación."
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
@@ -19529,9 +19208,8 @@ msgid "Could not write file: \"%s\"."
msgstr "No se pudo escribir el archivo: \"%s\"."
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
-#, fuzzy
msgid "Icon Creation"
-msgstr "Asignar Margen"
+msgstr "Creación de Iconos"
#: platform/javascript/export/export.cpp
msgid "Could not read file: \"%s\"."
@@ -19546,14 +19224,12 @@ msgid "Variant"
msgstr "Variante"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Export Type"
-msgstr "Exportar"
+msgstr "Tipo de Exportación"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "VRAM Texture Compression"
-msgstr "Expresión"
+msgstr "Compresión de Texturas en la VRAM"
#: platform/javascript/export/export.cpp
msgid "For Desktop"
@@ -19568,14 +19244,12 @@ msgid "HTML"
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Export Icon"
-msgstr "Expandir Todo"
+msgstr "Icono de Exportación"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Custom HTML Shell"
-msgstr "CustomNode"
+msgstr "HTML Shell Personalizado"
#: platform/javascript/export/export.cpp
msgid "Head Include"
@@ -19590,9 +19264,8 @@ msgid "Focus Canvas On Start"
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Experimental Virtual Keyboard"
-msgstr "Filtrar señales"
+msgstr "Teclado Virtual Experimental"
#: platform/javascript/export/export.cpp
msgid "Progressive Web App"
@@ -19639,9 +19312,8 @@ msgid "HTTP Port"
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Use SSL"
-msgstr "Usar Snap"
+msgstr "Usar SSL"
#: platform/javascript/export/export.cpp
msgid "SSL Key"
@@ -19728,33 +19400,28 @@ msgid "High Res"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Location Usage Description"
-msgstr "Descripción"
+msgstr "Ubicación de la Descripción de Uso"
#: platform/osx/export/export.cpp
msgid "Address Book Usage Description"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Calendar Usage Description"
-msgstr "Descripción"
+msgstr "Descripción del Uso del Calendario"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Photos Library Usage Description"
-msgstr "Descripciones de Propiedades"
+msgstr "Descripción de Uso de la Librería de Fotos"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Desktop Folder Usage Description"
-msgstr "Descripciones de Métodos"
+msgstr "Descripción de Uso de la Carpeta de Escritorio"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Documents Folder Usage Description"
-msgstr "Descripciones de Métodos"
+msgstr "Descripción de Uso de la Carpeta de Documentos"
#: platform/osx/export/export.cpp
msgid "Downloads Folder Usage Description"
@@ -19769,39 +19436,33 @@ msgid "Removable Volumes Usage Description"
msgstr ""
#: platform/osx/export/export.cpp platform/windows/export/export.cpp
-#, fuzzy
msgid "Codesign"
-msgstr "Firma de código DMG"
+msgstr "Codesign"
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Identity"
-msgstr "Indentar a la Izquierda"
+msgstr "Identidad"
#: platform/osx/export/export.cpp platform/windows/export/export.cpp
-#, fuzzy
msgid "Timestamp"
-msgstr "Tiempo"
+msgstr "Marca de Tiempo"
#: platform/osx/export/export.cpp
msgid "Hardened Runtime"
-msgstr ""
+msgstr "Hardened Runtime"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Replace Existing Signature"
-msgstr "Reemplazar en Archivos"
+msgstr "Reemplazar Firma Existente"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Entitlements"
-msgstr "Gizmos"
+msgstr "Derechos"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Custom File"
-msgstr "CustomNode"
+msgstr "Archivo Personalizado"
#: platform/osx/export/export.cpp
msgid "Allow JIT Code Execution"
@@ -19816,14 +19477,12 @@ msgid "Allow Dyld Environment Variables"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Disable Library Validation"
-msgstr "Botón Desactivado"
+msgstr "Desactivar Validación de Bibliotecas"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Audio Input"
-msgstr "Añadir Entrada"
+msgstr "Entrada de Audio"
#: platform/osx/export/export.cpp
msgid "Address Book"
@@ -19834,81 +19493,68 @@ msgid "Calendars"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Photos Library"
-msgstr "Exportar Librería"
+msgstr "Librería de Fotos"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Apple Events"
-msgstr "Añadir Evento"
+msgstr "Eventos de Apple"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Debugging"
-msgstr "Depurar"
+msgstr "Depuración"
#: platform/osx/export/export.cpp
msgid "App Sandbox"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Network Server"
-msgstr "Red de Pares"
+msgstr "Servidor de Red"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Network Client"
-msgstr "Red de Pares"
+msgstr "Cliente de Red"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Device USB"
-msgstr "Dispositivo"
+msgstr "Dispositivo USB"
#: platform/osx/export/export.cpp
msgid "Device Bluetooth"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Files Downloads"
-msgstr "Descargar"
+msgstr "Descargas de Archivos"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Files Pictures"
-msgstr "Características"
+msgstr "Archivos de Imágenes"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Files Music"
-msgstr "Archivo"
+msgstr "Archivos de Música"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Files Movies"
-msgstr "Filtrar tiles"
+msgstr "Archivos de Vídeo"
#: platform/osx/export/export.cpp platform/windows/export/export.cpp
-#, fuzzy
msgid "Custom Options"
-msgstr "Opciones de Bus"
+msgstr "Opciones Personalizadas"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Notarization"
-msgstr "Traducciones"
+msgstr "Notarización"
#: platform/osx/export/export.cpp
msgid "Apple ID Name"
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Apple ID Password"
-msgstr "Contraseña"
+msgstr "Contraseña del ID de Apple"
#: platform/osx/export/export.cpp
msgid "Apple Team ID"
@@ -19931,13 +19577,12 @@ msgid "Notarization request UUID: \"%s\""
msgstr ""
#: platform/osx/export/export.cpp
-#, fuzzy
msgid ""
"The notarization process generally takes less than an hour. When the process "
"is completed, you'll receive an email."
msgstr ""
-"Nota: El proceso de notarización generalmente toma menos de una hora. Cuando "
-"se complete el proceso, recibirá un correo electrónico."
+"El proceso de notarización suele durar menos de una hora. Cuando el proceso "
+"haya finalizado, recibirás un correo electrónico."
#: platform/osx/export/export.cpp
msgid ""
@@ -19956,17 +19601,15 @@ msgstr ""
"notarial a la aplicación exportada (opcional):"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
msgstr ""
-"El sellado de tiempo no es compatible con la firma ad-hoc, y se desactivará!"
+"¡La marca de tiempo no es compatible con la firma ad-hoc, y fue desactivada!"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid ""
"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
msgstr ""
-"Hardened Runtime no es compatible con la firma ad-hoc, y se desactivará!"
+"¡Hardened Runtime no es compatible con la firma ad-hoc, y fue desactivado!"
#: platform/osx/export/export.cpp
msgid "Built-in CodeSign failed with error \"%s\"."
@@ -19991,16 +19634,14 @@ msgid "Cannot sign file %s."
msgstr "No se puede firmar el archivo %s."
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
msgstr ""
-"Los enlaces simbólicos relativos no son compatibles con este sistema "
-"operativo, ¡el proyecto exportado podría estar dañado!"
+"Los enlaces simbólicos relativos no son compatibles, ¡los \"%s\" exportados "
+"podrían estar rotos!"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "DMG Creation"
-msgstr "Direcciones"
+msgstr "Creación de DMG"
#: platform/osx/export/export.cpp
msgid "Could not start hdiutil executable."
@@ -20036,13 +19677,12 @@ msgstr ""
"operativo, ¡el proyecto exportado podría estar dañado!"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid ""
"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
-"Plantilla binaria solicitada '%s' no encontrada. Es posible que falte en el "
-"archivo de plantillas."
+"No se ha encontrado la plantilla binaria \"%s\" solicitada. Es posible que "
+"no se encuentre en el archivo de plantillas."
#: platform/osx/export/export.cpp
msgid "Making PKG"
@@ -20085,9 +19725,8 @@ msgid "Sending archive for notarization"
msgstr "Enviando archivo para notarización"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "ZIP Creation"
-msgstr "Proyecto"
+msgstr "Creación de ZIP"
#: platform/osx/export/export.cpp
msgid "Could not open file to read from path \"%s\"."
@@ -20126,9 +19765,7 @@ msgstr "Notarización: Se requiere la firma del código para la notarización."
#: platform/osx/export/export.cpp
msgid "Notarization: Hardened runtime is required for notarization."
-msgstr ""
-"Notarización: se requiere tiempo de ejecución endurecido para la "
-"certificación notarial."
+msgstr "Notarización: Se requiere Hardened runtime para la notarización."
#: platform/osx/export/export.cpp
msgid "Notarization: Timestamp runtime is required for notarization."
@@ -20165,7 +19802,7 @@ msgid ""
"Hardened Runtime is not compatible with ad-hoc signature, and will be "
"disabled!"
msgstr ""
-"Hardened Runtime no es compatible con la firma ad-hoc, y se desactivará!"
+"¡Hardened Runtime no es compatible con la firma ad-hoc, y se desactivará!"
#: platform/osx/export/export.cpp
msgid ""
@@ -20237,14 +19874,12 @@ msgid "Force Builtin Codesign"
msgstr ""
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Architecture"
-msgstr "Añadir una entrada de arquitectura"
+msgstr "Arquitectura"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Display Name"
-msgstr "Escala de Visualización"
+msgstr "Nombre a Mostrar"
#: platform/uwp/export/export.cpp
msgid "Short Name"
@@ -20263,24 +19898,20 @@ msgid "Product GUID"
msgstr "GUID del producto"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Publisher GUID"
-msgstr "Limpiar Guías"
+msgstr "GUID del Editor"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Signing"
-msgstr "Señal"
+msgstr "Firmando"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Certificate"
-msgstr "Certificados"
+msgstr "Certificado"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Algorithm"
-msgstr "Depurador"
+msgstr "Algoritmo"
#: platform/uwp/export/export.cpp
msgid "Major"
@@ -20291,23 +19922,20 @@ msgid "Minor"
msgstr ""
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Build"
-msgstr "Modo de Regla"
+msgstr "Compilación"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Revision"
-msgstr "Expresión"
+msgstr "Revisión"
#: platform/uwp/export/export.cpp
msgid "Landscape"
msgstr ""
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Portrait"
-msgstr "Voltear Portales"
+msgstr "Retrato"
#: platform/uwp/export/export.cpp
msgid "Landscape Flipped"
@@ -20318,9 +19946,8 @@ msgid "Portrait Flipped"
msgstr ""
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Store Logo"
-msgstr "Modo de Escalado"
+msgstr "Logo de Tienda"
#: platform/uwp/export/export.cpp
msgid "Square 44 X 44 Logo"
@@ -20347,9 +19974,8 @@ msgid "Splash Screen"
msgstr "Pantalla de Bienvenida"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Tiles"
-msgstr "Archivo"
+msgstr "Tiles"
#: platform/uwp/export/export.cpp
msgid "Show Name On Square 150 X 150"
@@ -20433,18 +20059,16 @@ msgid "UWP"
msgstr ""
#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
-#, fuzzy
msgid "Signtool"
-msgstr "Señal"
+msgstr "Signtool"
#: platform/uwp/export/export.cpp
msgid "Debug Certificate"
msgstr ""
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Debug Algorithm"
-msgstr "Depurador"
+msgstr "Algoritmo de Depuración"
#: platform/windows/export/export.cpp
msgid "Failed to rename temporary file \"%s\"."
@@ -20459,19 +20083,16 @@ msgid "Timestamp Server URL"
msgstr ""
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Digest Algorithm"
-msgstr "Depurador"
+msgstr "Algoritmo de Compilación"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Modify Resources"
-msgstr "Copiar Recurso"
+msgstr "Modificar Recursos"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "File Version"
-msgstr "Versión"
+msgstr "Versión del Archivo"
#: platform/windows/export/export.cpp
msgid "Product Version"
@@ -20486,38 +20107,32 @@ msgid "Product Name"
msgstr "Nombre del Producto"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "File Description"
-msgstr "Descripción"
+msgstr "Descripción del Archivo"
#: platform/windows/export/export.cpp
msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Resources Modification"
-msgstr "Notificaciones Push"
+msgstr "Modificación de los Recursos"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Could not find rcedit executable at \"%s\"."
-msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+msgstr "No se pudo encontrar el ejecutable rcedit en \"%s\"."
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Could not find wine executable at \"%s\"."
-msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+msgstr "No se pudo encontrar el ejecutable de wine en \"%s\"."
#: platform/windows/export/export.cpp
-#, fuzzy
msgid ""
"Could not start rcedit executable, configure rcedit path in the Editor "
"Settings (Export > Windows > Rcedit)."
msgstr ""
-"La herramienta rcedit debe configurarse en la configuración del editor "
-"(Exportar > Windows > Rcedit) para cambiar los datos de información del "
-"ícono o la aplicación."
+"No se ha podido iniciar el ejecutable rcedit, configura la ruta de rcedit en "
+"la configuración del editor (Exportar > Windows > Rcedit)."
#: platform/windows/export/export.cpp
msgid ""
@@ -20526,33 +20141,28 @@ msgid ""
msgstr ""
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Could not find signtool executable at \"%s\"."
-msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+msgstr "No se pudo encontrar el ejecutable de signtool en \"%s\"."
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Could not find osslsigncode executable at \"%s\"."
-msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+msgstr "No se pudo encontrar el ejecutable osslsigncode en \"%s\"."
#: platform/windows/export/export.cpp
msgid "Invalid identity type."
msgstr "Tipo de identificador inválido."
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Invalid timestamp server."
-msgstr "Nombre inválido."
+msgstr "Servidor de marcas de tiempo inválido."
#: platform/windows/export/export.cpp
-#, fuzzy
msgid ""
"Could not start signtool executable, configure signtool path in the Editor "
"Settings (Export > Windows > Signtool)."
msgstr ""
-"La herramienta rcedit debe configurarse en la configuración del editor "
-"(Exportar > Windows > Rcedit) para cambiar los datos de información del "
-"ícono o la aplicación."
+"No se ha podido iniciar el ejecutable de signtool, configura la ruta de "
+"signtool en la configuración del editor (Exportar > Windows > Signtool)."
#: platform/windows/export/export.cpp
msgid ""
@@ -20590,9 +20200,8 @@ msgid "Windows executables cannot be >= 4 GiB."
msgstr ""
#: platform/windows/export/export.cpp platform/x11/export/export.cpp
-#, fuzzy
msgid "Failed to open executable file \"%s\"."
-msgstr "Archivo ejecutable no válido."
+msgstr "Fallo al abrir el archivo ejecutable \"%s\"."
#: platform/windows/export/export.cpp platform/x11/export/export.cpp
msgid "Executable file header corrupted."
@@ -20603,9 +20212,8 @@ msgid "Executable \"pck\" section not found."
msgstr ""
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Windows"
-msgstr "Nueva Ventana"
+msgstr "Windows"
#: platform/windows/export/export.cpp
msgid "Rcedit"
@@ -20625,9 +20233,8 @@ msgstr ""
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
-#, fuzzy
msgid "Frames"
-msgstr "Fotograma %"
+msgstr "Fotogramas"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -20639,21 +20246,18 @@ msgstr ""
#: scene/2d/animated_sprite.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/particles_2d.cpp scene/3d/cpu_particles.cpp scene/3d/particles.cpp
-#, fuzzy
msgid "Speed Scale"
-msgstr "Escala"
+msgstr "Escala de Velocidad"
#: scene/2d/animated_sprite.cpp scene/2d/audio_stream_player_2d.cpp
#: scene/3d/audio_stream_player_3d.cpp scene/3d/sprite_3d.cpp
#: scene/audio/audio_stream_player.cpp
-#, fuzzy
msgid "Playing"
msgstr "Reproducir"
#: scene/2d/animated_sprite.cpp scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
-#, fuzzy
msgid "Centered"
-msgstr "Centro"
+msgstr "Centrado"
#: scene/2d/animated_sprite.cpp scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#: scene/gui/texture_button.cpp scene/gui/texture_rect.cpp
@@ -20666,39 +20270,32 @@ msgid "Flip V"
msgstr ""
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Monitoring"
-msgstr "Monitor"
+msgstr "Monitorización"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Monitorable"
-msgstr "Monitor"
+msgstr "Monitorizable"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Physics Overrides"
-msgstr "Anulaciones"
+msgstr "Anulaciones de Físicas"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Space Override"
-msgstr "Anulaciones"
+msgstr "Anulación de Espacio"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Gravity Point"
-msgstr "Generar puntos"
+msgstr "Punto de Gravedad"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Gravity Distance Scale"
-msgstr "WaitInstanceSignal"
+msgstr "Escala de Distancia de la Gravedad"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Gravity Vec"
-msgstr "Vista Previa Por Defecto"
+msgstr "Velocidad de la Gravedad"
#: scene/2d/area_2d.cpp scene/2d/cpu_particles_2d.cpp scene/3d/area.cpp
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
@@ -20706,42 +20303,36 @@ msgid "Gravity"
msgstr ""
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Linear Damp"
-msgstr "Lineal"
+msgstr "Amortiguación Lineal"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
msgid "Angular Damp"
msgstr ""
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Audio Bus"
-msgstr "Añadir Bus de Audio"
+msgstr "Bus de Audio"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
-#, fuzzy
msgid "Override"
-msgstr "Anulaciones"
+msgstr "Anular"
#: scene/2d/audio_stream_player_2d.cpp scene/audio/audio_stream_player.cpp
#: scene/gui/video_player.cpp servers/audio/effects/audio_effect_amplify.cpp
-#, fuzzy
msgid "Volume dB"
-msgstr "Volumen"
+msgstr "Volumen dB"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp
#: servers/audio/effects/audio_effect_pitch_shift.cpp
-#, fuzzy
msgid "Pitch Scale"
-msgstr "Escala"
+msgstr "Escala de Tono"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
-#, fuzzy
msgid "Autoplay"
-msgstr "Act./Desact. Reproducción Automática"
+msgstr "Reproducción Automática"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp
@@ -20756,29 +20347,25 @@ msgid "Max Distance"
msgstr "Distancia Maxima"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/light.cpp
-#, fuzzy
msgid "Attenuation"
-msgstr "Animación"
+msgstr "Atenuación"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
-#, fuzzy
msgid "Bus"
-msgstr "Añadir Bus"
+msgstr "Bus"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
msgid "Area Mask"
msgstr ""
#: scene/2d/back_buffer_copy.cpp
-#, fuzzy
msgid "Copy Mode"
-msgstr "Copiar Nodos"
+msgstr "Modo de Copia"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Anchor Mode"
-msgstr "Modo de Icono"
+msgstr "Modo de Anclaje"
#: scene/2d/camera_2d.cpp
msgid "Rotating"
@@ -20790,83 +20377,70 @@ msgid "Current"
msgstr "Actual"
#: scene/2d/camera_2d.cpp scene/gui/graph_edit.cpp
-#, fuzzy
msgid "Zoom"
-msgstr "Acercar Zoom"
+msgstr "Zoom"
#: scene/2d/camera_2d.cpp scene/main/canvas_layer.cpp
-#, fuzzy
msgid "Custom Viewport"
-msgstr "1 Viewport"
+msgstr "Vista Personalizada"
#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp
#: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp
#: scene/animation/animation_tree_player.cpp scene/main/timer.cpp
-#, fuzzy
msgid "Process Mode"
-msgstr "Modo de Movimiento"
+msgstr "Modo de Proceso"
#: scene/2d/camera_2d.cpp
msgid "Limit"
-msgstr ""
+msgstr "Limite"
#: scene/2d/camera_2d.cpp scene/gui/control.cpp scene/gui/nine_patch_rect.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Left"
-msgstr "UI Izquierda"
+msgstr "Izquierda"
#: scene/2d/camera_2d.cpp scene/gui/control.cpp scene/gui/nine_patch_rect.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Right"
-msgstr "Luz"
+msgstr "Derecha"
#: scene/2d/camera_2d.cpp scene/gui/control.cpp scene/gui/nine_patch_rect.cpp
#: scene/resources/dynamic_font.cpp scene/resources/style_box.cpp
#: scene/resources/texture.cpp
-#, fuzzy
msgid "Bottom"
-msgstr "Inferior Izquierda"
+msgstr "Inferior"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Smoothed"
msgstr "Suavizado"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Draw Margin"
-msgstr "Asignar Margen"
+msgstr "Margen de Arrastre"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Drag Margin H Enabled"
-msgstr "Asignar Margen"
+msgstr "Margen de Arrastre H Activado"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Drag Margin V Enabled"
-msgstr "Asignar Margen"
+msgstr "Margen de Arrastre V Activado"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Smoothing"
-msgstr "Suavizado"
+msgstr "Suavizar"
#: scene/2d/camera_2d.cpp
msgid "H"
msgstr ""
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "V"
-msgstr "UV"
+msgstr "V"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Drag Margin"
-msgstr "Asignar Margen"
+msgstr "Margen de Arrastre"
#: scene/2d/camera_2d.cpp
msgid "Draw Screen"
@@ -20877,25 +20451,21 @@ msgid "Draw Limits"
msgstr "Límites de Dibujo"
#: scene/2d/camera_2d.cpp
-#, fuzzy
msgid "Draw Drag Margin"
-msgstr "Asignar Margen"
+msgstr "Margen de Arrastre del Trazado"
#: scene/2d/canvas_item.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
-#, fuzzy
msgid "Blend Mode"
-msgstr "Nodo Blend2"
+msgstr "Modo de Fusión"
#: scene/2d/canvas_item.cpp
-#, fuzzy
msgid "Light Mode"
-msgstr "Ancho Derecha"
+msgstr "Modo de Iluminación"
#: scene/2d/canvas_item.cpp
-#, fuzzy
msgid "Particles Animation"
-msgstr "Partículas"
+msgstr "Animación de Partículas"
#: scene/2d/canvas_item.cpp
msgid "Particles Anim H Frames"
@@ -20906,40 +20476,34 @@ msgid "Particles Anim V Frames"
msgstr ""
#: scene/2d/canvas_item.cpp
-#, fuzzy
msgid "Particles Anim Loop"
-msgstr "Partículas"
+msgstr "Bucle de Animación de Partículas"
#: scene/2d/canvas_item.cpp scene/3d/spatial.cpp
-#, fuzzy
msgid "Visibility"
-msgstr "Cambiar Visibilidad"
+msgstr "Visibilidad"
#: scene/2d/canvas_item.cpp scene/3d/spatial.cpp scene/gui/progress_bar.cpp
#: scene/gui/rich_text_effect.cpp scene/main/canvas_layer.cpp
-#, fuzzy
msgid "Visible"
-msgstr "Cambiar Visibilidad"
+msgstr "Visible"
#: scene/2d/canvas_item.cpp
-#, fuzzy
msgid "Self Modulate"
-msgstr "Rellenar"
+msgstr "Modulación Automática"
#: scene/2d/canvas_item.cpp
msgid "Show Behind Parent"
msgstr ""
#: scene/2d/canvas_item.cpp
-#, fuzzy
msgid "Show On Top"
-msgstr "Mostrar Origen"
+msgstr "Mostrar Arriba"
#: scene/2d/canvas_item.cpp scene/2d/light_occluder_2d.cpp
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Light Mask"
-msgstr "Luz"
+msgstr "Máscara de Luz"
#: scene/2d/canvas_item.cpp
msgid "Use Parent Material"
@@ -20966,9 +20530,8 @@ msgstr ""
"CollisionPolygon2D para definir su forma."
#: scene/2d/collision_object_2d.cpp
-#, fuzzy
msgid "Pickable"
-msgstr "Elegir Tile"
+msgstr "Seleccionable"
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -21001,29 +20564,27 @@ msgstr ""
msgid ""
"The One Way Collision property will be ignored when the parent is an Area2D."
msgstr ""
+"La propiedad Colisión en Una Dirección será ignorada cuando el padre sea un "
+"Area2D."
#: scene/2d/collision_polygon_2d.cpp
-#, fuzzy
msgid "Build Mode"
-msgstr "Modo de Regla"
+msgstr "Modo de Compilación"
#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp
#: scene/3d/collision_polygon.cpp scene/3d/collision_shape.cpp
#: scene/animation/animation_node_state_machine.cpp scene/gui/base_button.cpp
#: scene/gui/texture_button.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Disabled"
-msgstr "Desactivar Elemento"
+msgstr "Desactivado"
#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp
-#, fuzzy
msgid "One Way Collision"
-msgstr "Crear Polígono de Colisión"
+msgstr "Colisión en Una Dirección"
#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp
-#, fuzzy
msgid "One Way Collision Margin"
-msgstr "Crear Polígono de Colisión"
+msgstr "Margen de Colisión en Una Dirección"
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -21072,15 +20633,13 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp scene/main/timer.cpp
-#, fuzzy
msgid "One Shot"
-msgstr "Nodo OneShot"
+msgstr "Un Disparo"
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
-#, fuzzy
msgid "Preprocess"
-msgstr "Post procesado"
+msgstr "Preproceso"
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
@@ -21099,9 +20658,8 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
-#, fuzzy
msgid "Fixed FPS"
-msgstr "Ver FPS"
+msgstr "FPS Fijos"
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
@@ -21115,9 +20673,8 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
-#, fuzzy
msgid "Local Coords"
-msgstr "Proyectos Locales"
+msgstr "Coordenadas Locales"
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
@@ -21126,9 +20683,8 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Emission Shape"
-msgstr "Máscara de Emisión"
+msgstr "Forma de la Emisión"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21136,26 +20692,22 @@ msgid "Sphere Radius"
msgstr "Radio de la Esfera"
#: scene/2d/cpu_particles_2d.cpp
-#, fuzzy
msgid "Rect Extents"
-msgstr "Gizmos"
+msgstr "Extender Completo"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
-#, fuzzy
msgid "Normals"
-msgstr "Formato"
+msgstr "Normales"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Align Y"
-msgstr "Asignar"
+msgstr "Alineación Y"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Direction"
-msgstr "Direcciones"
+msgstr "Dirección"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21165,15 +20717,13 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Initial Velocity"
-msgstr "Inicializar"
+msgstr "Velocidad Inicial"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Velocity Random"
-msgstr "Velocidad"
+msgstr "Velocidad Aleatoria"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp servers/physics_2d_server.cpp
@@ -21183,27 +20733,23 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Velocity Curve"
-msgstr "Velocidad"
+msgstr "Curva de Velocidad"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Orbit Velocity"
-msgstr "Vista de Órbita Derecha"
+msgstr "Velocidad de la Órbita"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Linear Accel"
-msgstr "Lineal"
+msgstr "Aceleración Lineal"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Accel"
-msgstr "Acceso"
+msgstr "Aceleración"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21212,9 +20758,8 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Accel Curve"
-msgstr "Partir Curva"
+msgstr "Curva de Aceleración"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21241,9 +20786,8 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Damping Curve"
-msgstr "Partir Curva"
+msgstr "Curva de Amortiguación"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp scene/3d/light.cpp
#: scene/resources/particles_material.cpp
@@ -21257,9 +20801,8 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Angle Curve"
-msgstr "Cerrar Curva"
+msgstr "Curva de Ãngulo"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
msgid "Scale Amount"
@@ -21270,15 +20813,13 @@ msgid "Scale Amount Random"
msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
-#, fuzzy
msgid "Scale Amount Curve"
-msgstr "Escalar Desde Cursor"
+msgstr "Curva de Cantidad de Escala"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Color Ramp"
-msgstr "Colores"
+msgstr "Rampa de Color"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21307,15 +20848,13 @@ msgstr "Curva de Variación"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Speed Random"
-msgstr "Escala"
+msgstr "Velocidad Aleatoria"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Speed Curve"
-msgstr "Partir Curva"
+msgstr "Curva de Velocidad"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21324,9 +20863,8 @@ msgstr "Desplazamiento Aleatorio"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Offset Curve"
-msgstr "Cerrar Curva"
+msgstr "Curva de Desplazamiento"
#: scene/2d/joints_2d.cpp
msgid "Node A and Node B must be PhysicsBody2Ds"
@@ -21349,14 +20887,12 @@ msgid "Node A and Node B must be different PhysicsBody2Ds"
msgstr "El Nodo A y el Nodo B deben ser diferentes PhysicsBody2D"
#: scene/2d/joints_2d.cpp scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Node A"
-msgstr "Nodos"
+msgstr "Nodo A"
#: scene/2d/joints_2d.cpp scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Node B"
-msgstr "Nodos"
+msgstr "Nodo B"
#: scene/2d/joints_2d.cpp scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/light.cpp scene/3d/physics_body.cpp scene/3d/physics_joint.cpp
@@ -21365,9 +20901,8 @@ msgid "Bias"
msgstr ""
#: scene/2d/joints_2d.cpp
-#, fuzzy
msgid "Disable Collision"
-msgstr "Botón Desactivado"
+msgstr "Desactivar Colisión"
#: scene/2d/joints_2d.cpp scene/3d/physics_body.cpp scene/3d/physics_joint.cpp
msgid "Softness"
@@ -21379,9 +20914,8 @@ msgid "Length"
msgstr ""
#: scene/2d/joints_2d.cpp
-#, fuzzy
msgid "Initial Offset"
-msgstr "Inicializar"
+msgstr "Desplazamiento Inicial"
#: scene/2d/joints_2d.cpp scene/3d/vehicle_body.cpp
msgid "Rest Length"
@@ -21400,14 +20934,12 @@ msgstr ""
"Texture\"."
#: scene/2d/light_2d.cpp scene/3d/light.cpp scene/gui/reference_rect.cpp
-#, fuzzy
msgid "Editor Only"
-msgstr "Editor"
+msgstr "Sólo para el Editor"
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid "Texture Scale"
-msgstr "Región de Textura"
+msgstr "Escala de Textura"
#: scene/2d/light_2d.cpp scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/light.cpp scene/resources/environment.cpp
@@ -21424,48 +20956,40 @@ msgid "Z Max"
msgstr ""
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid "Layer Min"
-msgstr "Cambiar Tamaño de Cámara"
+msgstr "Capa Mínima"
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid "Layer Max"
-msgstr "Capa"
+msgstr "Capa Máxima"
#: scene/2d/light_2d.cpp
msgid "Item Cull Mask"
msgstr ""
#: scene/2d/light_2d.cpp scene/3d/light.cpp scene/resources/style_box.cpp
-#, fuzzy
msgid "Shadow"
-msgstr "Shader"
+msgstr "Sombra"
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid "Buffer Size"
-msgstr "Vista Trasera"
+msgstr "Tamaño del Buffer"
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid "Gradient Length"
-msgstr "Degradado Editado"
+msgstr "Longitud del Gradiente"
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid "Filter Smooth"
-msgstr "Filtrar métodos"
+msgstr "Filtro Suavizado"
#: scene/2d/light_occluder_2d.cpp
-#, fuzzy
msgid "Closed"
-msgstr "Cerrar"
+msgstr "Cerrado"
#: scene/2d/light_occluder_2d.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Cull Mode"
-msgstr "Modo de Regla"
+msgstr "Modo de Sacrificio"
#: scene/2d/light_occluder_2d.cpp
msgid ""
@@ -21481,47 +21005,40 @@ msgstr ""
"polígono."
#: scene/2d/line_2d.cpp
-#, fuzzy
msgid "Width Curve"
-msgstr "Partir Curva"
+msgstr "Curva de Ancho"
#: scene/2d/line_2d.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Default Color"
-msgstr "Por defecto"
+msgstr "Color por Defecto"
#: scene/2d/line_2d.cpp scene/resources/texture.cpp
msgid "Fill"
-msgstr ""
+msgstr "Rellenar"
#: scene/2d/line_2d.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Gradient"
-msgstr "Degradado Editado"
+msgstr "Gradiente"
#: scene/2d/line_2d.cpp
-#, fuzzy
msgid "Texture Mode"
-msgstr "Región de Textura"
+msgstr "Modo de Textura"
#: scene/2d/line_2d.cpp
msgid "Capping"
-msgstr ""
+msgstr "Tapado"
#: scene/2d/line_2d.cpp
-#, fuzzy
msgid "Joint Mode"
-msgstr "Modo de Icono"
+msgstr "Modo de Unión"
#: scene/2d/line_2d.cpp
-#, fuzzy
msgid "Begin Cap Mode"
-msgstr "Modo de Región"
+msgstr "Iniciar Modo Cap"
#: scene/2d/line_2d.cpp
-#, fuzzy
msgid "End Cap Mode"
-msgstr "Modo de Ajuste:"
+msgstr "Modo Tapón"
#: scene/2d/line_2d.cpp scene/2d/polygon_2d.cpp scene/resources/style_box.cpp
msgid "Border"
@@ -21537,14 +21054,12 @@ msgstr ""
#: scene/2d/line_2d.cpp scene/2d/polygon_2d.cpp
#: scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Antialiased"
-msgstr "Inicializar"
+msgstr "Suavizado Espacial"
#: scene/2d/multimesh_instance_2d.cpp scene/3d/multimesh_instance.cpp
-#, fuzzy
msgid "Multimesh"
-msgstr "Multiplicar %s"
+msgstr "Multimesh"
#: scene/2d/navigation_2d.cpp scene/3d/baked_lightmap.cpp
#: scene/3d/navigation.cpp scene/animation/root_motion_view.cpp
@@ -21564,60 +21079,54 @@ msgid ""
msgstr ""
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Pathfinding"
-msgstr "Vinculación"
+msgstr "Pathfinding"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Path Desired Distance"
-msgstr "Distancia de la Ruta U"
+msgstr "Ruta Distancia Deseada"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
-msgstr ""
+msgstr "Distancia Deseada del Objetivo"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Path Max Distance"
-msgstr "Distancia Máxima de Ruta"
+msgstr "Distancia Máxima de la Ruta"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Avoidance"
-msgstr "Avanzado"
+msgstr "Evasión"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Avoidance Enabled"
-msgstr "Activar"
+msgstr "Evasión Activada"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Neighbor Dist"
-msgstr ""
+msgstr "Dist. de Vecinos"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Max Neighbors"
-msgstr ""
+msgstr "Máximo de Vecinos"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Time Horizon"
-msgstr "Voltear Horizontalmente"
+msgstr "Horizonte del Tiempo"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Max Speed"
msgstr "Velocidad Máxima"
#: scene/2d/navigation_agent_2d.cpp
-#, fuzzy
msgid ""
"The NavigationAgent2D can be used only under a Node2D inheriting parent node."
-msgstr "El NavigationAgent2D sólo puede utilizarse bajo un nodo Node2D."
+msgstr ""
+"El NavigationAgent2D sólo puede utilizarse bajo un nodo padre hijo de Node2D."
#: scene/2d/navigation_obstacle_2d.cpp scene/3d/navigation_obstacle.cpp
-#, fuzzy
msgid "Estimate Radius"
-msgstr "Cambiar Radio Externo de Torus"
+msgstr "Estimación del Radio"
#: scene/2d/navigation_obstacle_2d.cpp
msgid ""
@@ -21632,22 +21141,20 @@ msgid ""
"A NavigationPolygon resource must be set or created for this node to work. "
"Please set a property or draw a polygon."
msgstr ""
-"Se debe crear o asignar un recurso NavigationPolygon a este nodo para que "
-"funcione. Por favor, establece la propiedad o dibuja un polígono."
+"Un recurso NavigationPolygon debe ser establecido o creado para que este "
+"nodo funcione. Por favor, establece una propiedad o dibuja un polígono."
#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
-msgstr ""
+msgstr "Navpoly"
#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
-#, fuzzy
msgid "Enter Cost"
-msgstr "Centro Inferior"
+msgstr "Introduce Costo"
#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
-#, fuzzy
msgid "Travel Cost"
-msgstr "Viaje"
+msgstr "Costo del Viaje"
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
@@ -21655,9 +21162,8 @@ msgid "Rotation Degrees"
msgstr "Grados de Rotación"
#: scene/2d/node_2d.cpp scene/3d/spatial.cpp
-#, fuzzy
msgid "Global Rotation"
-msgstr "Constante Global"
+msgstr "Rotación Global"
#: scene/2d/node_2d.cpp
msgid "Global Rotation Degrees"
@@ -21668,41 +21174,37 @@ msgid "Global Scale"
msgstr "Escala Global"
#: scene/2d/node_2d.cpp scene/3d/spatial.cpp
-#, fuzzy
msgid "Global Transform"
-msgstr "Mantener transformación global"
+msgstr "Transformación Global"
#: scene/2d/node_2d.cpp
-#, fuzzy
msgid "Z As Relative"
-msgstr "Ajuste Relativo"
+msgstr "Z Como Relativo"
#: scene/2d/parallax_background.cpp scene/gui/scroll_container.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Scroll"
-msgstr ""
+msgstr "Scroll"
#: scene/2d/parallax_background.cpp
msgid "Base Offset"
msgstr "Desplazamiento Base"
#: scene/2d/parallax_background.cpp
-#, fuzzy
msgid "Base Scale"
-msgstr "Usar Ajuste de Escalado"
+msgstr "Escala Base"
#: scene/2d/parallax_background.cpp
msgid "Limit Begin"
-msgstr ""
+msgstr "Inicio del Límite"
#: scene/2d/parallax_background.cpp
-#, fuzzy
msgid "Limit End"
-msgstr "Al Final"
+msgstr "Fin del Límite"
#: scene/2d/parallax_background.cpp
msgid "Ignore Camera Zoom"
-msgstr ""
+msgstr "Ignorar Zoom de la Cámara"
#: scene/2d/parallax_layer.cpp
msgid ""
@@ -21714,12 +21216,10 @@ msgstr ""
#: scene/2d/parallax_layer.cpp scene/2d/physics_body_2d.cpp
#: scene/3d/physics_body.cpp scene/3d/vehicle_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Motion"
-msgstr "Acción"
+msgstr "Movimiento"
#: scene/2d/parallax_layer.cpp
-#, fuzzy
msgid "Mirroring"
msgstr "Reflejar"
@@ -21766,9 +21266,8 @@ msgstr ""
"\"Particles Animation\" activado."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid "Visibility Rect"
-msgstr "Modo de Prioridad"
+msgstr "Visibilidad Rect"
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid "Process Material"
@@ -21776,9 +21275,8 @@ msgstr ""
#: scene/2d/path_2d.cpp scene/3d/path.cpp scene/resources/sky.cpp
#: scene/resources/texture.cpp
-#, fuzzy
msgid "Curve"
-msgstr "Partir Curva"
+msgstr "Curva"
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
@@ -21806,25 +21304,21 @@ msgid "Lookahead"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/visual_instance.cpp
-#, fuzzy
msgid "Layers"
-msgstr "Capa"
+msgstr "Capas"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Constant Linear Velocity"
-msgstr "Inicializar"
+msgstr "Velocidad Lineal Constante"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Constant Angular Velocity"
-msgstr "Inicializar"
+msgstr "Velocidad Angular Constante"
#: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp
#: scene/resources/physics_material.cpp
-#, fuzzy
msgid "Friction"
-msgstr "Función"
+msgstr "Fricción"
#: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp
#: scene/resources/physics_material.cpp
@@ -21837,9 +21331,8 @@ msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: scene/resources/world.cpp scene/resources/world_2d.cpp
-#, fuzzy
msgid "Default Gravity"
-msgstr "Vista Previa Por Defecto"
+msgstr "Gravedad por Defecto"
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -21860,38 +21353,33 @@ msgid "Inertia"
msgstr "Inercia"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Weight"
-msgstr "Luz"
+msgstr "Peso"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Gravity Scale"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Custom Integrator"
-msgstr "CustomNode"
+msgstr "Integrador Personalizado"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Continuous CD"
-msgstr "Continuo"
+msgstr "CD Continuo"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Contacts Reported"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Contact Monitor"
-msgstr "Seleccionar Color"
+msgstr "Monitor de Contacto"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Sleeping"
-msgstr "Ajuste Inteligente"
+msgstr "Resposo"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Can Sleep"
@@ -21914,18 +21402,16 @@ msgid "Torque"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Safe Margin"
-msgstr "Asignar Margen"
+msgstr "Margen de Seguridad"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Sync To Physics"
msgstr "Sincronización Con La Física"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Moving Platform"
-msgstr "Moviendo salida"
+msgstr "Plataforma Móvil"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Apply Velocity On Leave"
@@ -21935,24 +21421,21 @@ msgstr ""
#: scene/3d/physics_body.cpp scene/gui/texture_button.cpp
#: scene/resources/default_theme/default_theme.cpp
#: scene/resources/line_shape_2d.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Normal"
-msgstr "Formato"
+msgstr "Normal"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Remainder"
msgstr "Recordatorio"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Local Shape"
-msgstr "Idioma"
+msgstr "Forma Local"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collider"
-msgstr "Modo de Colisión"
+msgstr "Colisionador"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
@@ -21961,26 +21444,22 @@ msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collider RID"
-msgstr "RID inválido"
+msgstr "Colisionador RID"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collider Shape"
-msgstr "Modo de Colisión"
+msgstr "Forma de Colisión"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Collider Shape Index"
-msgstr "Modo de Colisión"
+msgstr "Ãndice de Formas de Colisión"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collider Velocity"
-msgstr "Vista de Órbita Derecha"
+msgstr "Velocidad del Colisionador"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Collider Metadata"
@@ -21991,28 +21470,24 @@ msgid "Invert"
msgstr ""
#: scene/2d/polygon_2d.cpp
-#, fuzzy
msgid "Vertex Colors"
-msgstr "Vértice"
+msgstr "Color de los Vértices"
#: scene/2d/polygon_2d.cpp
-#, fuzzy
msgid "Internal Vertex Count"
-msgstr "Crear Vértice Interno"
+msgstr "Conteo de Vértices Internos"
#: scene/2d/position_2d.cpp
-#, fuzzy
msgid "Gizmo Extents"
-msgstr "Gizmos"
+msgstr "Extensión de Gizmos"
#: scene/2d/ray_cast_2d.cpp scene/3d/ray_cast.cpp
msgid "Exclude Parent"
msgstr ""
#: scene/2d/ray_cast_2d.cpp scene/3d/ray_cast.cpp
-#, fuzzy
msgid "Cast To"
-msgstr "Crear Nodo Shader"
+msgstr "Lanzar A"
#: scene/2d/ray_cast_2d.cpp scene/3d/ray_cast.cpp
msgid "Collide With"
@@ -22031,24 +21506,20 @@ msgid "Path property must point to a valid Node2D node to work."
msgstr "La propiedad Path debe apuntar a un nodo Node2D válido para funcionar."
#: scene/2d/remote_transform_2d.cpp scene/3d/remote_transform.cpp
-#, fuzzy
msgid "Remote Path"
-msgstr "Eliminar Punto"
+msgstr "Ruta Remota"
#: scene/2d/remote_transform_2d.cpp scene/3d/remote_transform.cpp
-#, fuzzy
msgid "Use Global Coordinates"
-msgstr "Siguiente Coordenada"
+msgstr "Utilizar Coordenadas Globales"
#: scene/2d/skeleton_2d.cpp scene/3d/skeleton.cpp
-#, fuzzy
msgid "Rest"
-msgstr "Reiniciar"
+msgstr "Reposo"
#: scene/2d/skeleton_2d.cpp
-#, fuzzy
msgid "Default Length"
-msgstr "Theme Predeterminado"
+msgstr "Longitud por Defecto"
#: scene/2d/skeleton_2d.cpp
msgid "This Bone2D chain should end at a Skeleton2D node."
@@ -22075,14 +21546,12 @@ msgid "Vframes"
msgstr ""
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
-#, fuzzy
msgid "Frame Coords"
-msgstr "Fotograma %"
+msgstr "Coordenadas del Marco"
#: scene/2d/sprite.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Filter Clip"
-msgstr "Filtrar scripts"
+msgstr "Filtrar Clips"
#: scene/2d/tile_map.cpp
msgid ""
@@ -22095,44 +21564,36 @@ msgstr ""
"RigidBody2D, KinematicBody2D, etc. para que puedan tener forma."
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Tile Set"
-msgstr "TileSet"
+msgstr "Tile Set"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Quadrant Size"
-msgstr "Cambiar Tamaño de Cámara"
+msgstr "Tamaño del Cuadrante"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Custom Transform"
-msgstr "Transformar"
+msgstr "Transformación Personalizada"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Half Offset"
-msgstr "Inicializar"
+msgstr "Medio Desplazamiento"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Tile Origin"
-msgstr "Ver Origen"
+msgstr "Origen de los Tiles"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Y Sort"
-msgstr "Ordenar"
+msgstr "Ordenar Y"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Show Collision"
-msgstr "Colisión"
+msgstr "Mostrar Colisión"
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Compatibility Mode"
-msgstr "Modo de Prioridad"
+msgstr "Modo de Compatibilidad"
#: scene/2d/tile_map.cpp
msgid "Centered Textures"
@@ -22143,32 +21604,28 @@ msgid "Cell Clip UV"
msgstr ""
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Use Parent"
-msgstr "Modo de Colisión"
+msgstr "Usar Padres"
#: scene/2d/tile_map.cpp
msgid "Use Kinematic"
msgstr ""
#: scene/2d/touch_screen_button.cpp
-#, fuzzy
msgid "Shape Centered"
-msgstr "Ajustar al Centro del Nodo"
+msgstr "Forma Centrada"
#: scene/2d/touch_screen_button.cpp
-#, fuzzy
msgid "Shape Visible"
-msgstr "Act./Desact. Visible"
+msgstr "Forma Visible"
#: scene/2d/touch_screen_button.cpp
msgid "Passby Press"
msgstr ""
#: scene/2d/touch_screen_button.cpp
-#, fuzzy
msgid "Visibility Mode"
-msgstr "Modo de Prioridad"
+msgstr "Modo de Visibilidad"
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -22179,28 +21636,24 @@ msgstr ""
"editada directamente como padre."
#: scene/2d/visibility_notifier_2d.cpp scene/3d/visibility_notifier.cpp
-#, fuzzy
msgid "Pause Animations"
-msgstr "Pegar Animación"
+msgstr "Pausar Animaciones"
#: scene/2d/visibility_notifier_2d.cpp scene/3d/visibility_notifier.cpp
msgid "Freeze Bodies"
msgstr ""
#: scene/2d/visibility_notifier_2d.cpp
-#, fuzzy
msgid "Pause Particles"
-msgstr "Partículas"
+msgstr "Pausar Partículas"
#: scene/2d/visibility_notifier_2d.cpp
-#, fuzzy
msgid "Pause Animated Sprites"
-msgstr "Pegar Animación"
+msgstr "Pausar Sprites Animados"
#: scene/2d/visibility_notifier_2d.cpp
-#, fuzzy
msgid "Process Parent"
-msgstr "Activar Prioridad"
+msgstr "Procesamiento de los Padres"
#: scene/2d/visibility_notifier_2d.cpp
msgid "Physics Process Parent"
@@ -22211,9 +21664,8 @@ msgid "Reverb Bus"
msgstr ""
#: scene/3d/area.cpp
-#, fuzzy
msgid "Uniformity"
-msgstr "Establecer Nombre de Uniform"
+msgstr "Uniformidad"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent."
@@ -22240,9 +21692,8 @@ msgstr ""
"un controlador real."
#: scene/3d/arvr_nodes.cpp
-#, fuzzy
msgid "Anchor ID"
-msgstr "Sólo anclado"
+msgstr "ID de Ancla"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent."
@@ -22265,9 +21716,8 @@ msgid "World Scale"
msgstr "Escala del Mundo"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Attenuation Model"
-msgstr "Nodo de Animación"
+msgstr "Modelo de Atenuación"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Unit dB"
@@ -22286,18 +21736,16 @@ msgid "Out Of Range Mode"
msgstr ""
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Emission Angle"
-msgstr "Colores de Emisión"
+msgstr "Ãngulo de Emisión"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Degrees"
msgstr "Grados"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Filter Attenuation dB"
-msgstr "Animación"
+msgstr "Filtro de Atenuación dB"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Attenuation Filter"
@@ -22311,19 +21759,16 @@ msgstr ""
#: scene/3d/audio_stream_player_3d.cpp
#: servers/audio/effects/audio_effect_filter.cpp
-#, fuzzy
msgid "dB"
-msgstr "B"
+msgstr "dB"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Doppler"
-msgstr "Activar Doppler"
+msgstr "Doppler"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Tracking"
-msgstr "Empaquetando"
+msgstr "Seguimiento"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/reflection_probe.cpp
@@ -22357,9 +21802,8 @@ msgstr "Hecho"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/reflection_probe.cpp scene/resources/box_shape.cpp
#: scene/resources/rectangle_shape_2d.cpp
-#, fuzzy
msgid "Extents"
-msgstr "Gizmos"
+msgstr "Extensiones"
#: scene/3d/baked_lightmap.cpp
msgid "Tweaks"
@@ -22382,66 +21826,56 @@ msgid "Use HDR"
msgstr ""
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Use Color"
-msgstr "Colores"
+msgstr "Usar Color"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Default Texels Per Unit"
-msgstr "Theme Predeterminado"
+msgstr "Texeles Por Unidad Predeterminados"
#: scene/3d/baked_lightmap.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Atlas"
-msgstr "Nuevo Atlas"
+msgstr "Atlas"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Generate"
-msgstr "General"
+msgstr "Generar"
#: scene/3d/baked_lightmap.cpp
msgid "Max Size"
msgstr "Tamaño Máximo"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Custom Sky"
-msgstr "CustomNode"
+msgstr "Cielo Personalizado"
#: scene/3d/baked_lightmap.cpp
msgid "Custom Sky Rotation Degrees"
msgstr "Grados de Rotación del Cielo Personalizados"
#: scene/3d/baked_lightmap.cpp scene/3d/ray_cast.cpp
-#, fuzzy
msgid "Custom Color"
-msgstr "CustomNode"
+msgstr "Color Personalizado"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Custom Energy"
-msgstr "Mover Efecto de Bus"
+msgstr "Energía Personalizada"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Min Light"
-msgstr "Indentar a la Derecha"
+msgstr "Luz Mínima"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Propagation"
-msgstr "Navegación"
+msgstr "Propagación"
#: scene/3d/baked_lightmap.cpp
msgid "Image Path"
msgstr ""
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Light Data"
-msgstr "Con Datos"
+msgstr "Datos de Iluminación"
#: scene/3d/bone_attachment.cpp scene/3d/physics_body.cpp
msgid "Bone Name"
@@ -22456,14 +21890,12 @@ msgid "Cull Mask"
msgstr ""
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Doppler Tracking"
-msgstr "Pista de Propiedades"
+msgstr "Seguimiento de Doppler"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Projection"
-msgstr "Proyecto"
+msgstr "Proyección"
#: scene/3d/camera.cpp
msgid "FOV"
@@ -22474,9 +21906,8 @@ msgid "Frustum Offset"
msgstr "Offset de Frustum"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Near"
-msgstr "Más Cercano"
+msgstr "Cercano"
#: scene/3d/camera.cpp
msgid "Far"
@@ -22487,23 +21918,20 @@ msgstr ""
#: scene/resources/shape.cpp scene/resources/style_box.cpp
#: scene/resources/texture.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
-#, fuzzy
msgid "Margin"
-msgstr "Asignar Margen"
+msgstr "Margen"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Clip To"
-msgstr "Clip Arriba"
+msgstr "Recortar A"
#: scene/3d/collision_object.cpp scene/3d/soft_body.cpp
msgid "Ray Pickable"
msgstr ""
#: scene/3d/collision_object.cpp
-#, fuzzy
msgid "Capture On Drag"
-msgstr "Captura"
+msgstr "Captura Al Arrastrar"
#: scene/3d/collision_object.cpp
msgid ""
@@ -22575,53 +22003,44 @@ msgstr ""
"Billboard esté ajustado a \"Particle Billboard\"."
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Box Extents"
-msgstr "Gizmos"
+msgstr "Extensión de Cajas"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Radius"
-msgstr "Máscara de Emisión"
+msgstr "Radio del Anillo"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Inner Radius"
-msgstr "Cambiar Radio Interno de Torus"
+msgstr "Radio Interior del Anillo"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Height"
-msgstr "Rotar a la Derecha"
+msgstr "Altura del Anillo"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Axis"
-msgstr "Advertencias"
+msgstr "Eje del Anillo"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Rotate Y"
-msgstr "Rotar"
+msgstr "Rotar Y"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Disable Z"
-msgstr "Desactivar Elemento"
+msgstr "Desactivar Z"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
msgid "Flatness"
msgstr ""
#: scene/3d/cull_instance.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Portals"
-msgstr "Voltear Portales"
+msgstr "Portales"
#: scene/3d/cull_instance.cpp
-#, fuzzy
msgid "Portal Mode"
-msgstr "Modo de Prioridad"
+msgstr "Modo Portal"
#: scene/3d/cull_instance.cpp
msgid "Include In Bound"
@@ -22632,9 +22051,8 @@ msgid "Allow Merging"
msgstr ""
#: scene/3d/cull_instance.cpp
-#, fuzzy
msgid "Autoplace Priority"
-msgstr "Activar Prioridad"
+msgstr "Prioridad de Autoemplazamiento"
#: scene/3d/gi_probe.cpp
msgid "Plotting Meshes"
@@ -22667,9 +22085,8 @@ msgid "Subdiv"
msgstr ""
#: scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Dynamic Range"
-msgstr "Librería Dinámica"
+msgstr "Rango Dinámico"
#: scene/3d/gi_probe.cpp scene/3d/light.cpp
msgid "Normal Bias"
@@ -22677,18 +22094,16 @@ msgstr ""
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
#: scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Pixel Size"
-msgstr "Ajuste de Píxeles"
+msgstr "Tamaño de Píxeles"
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
msgid "Billboard"
msgstr ""
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
-#, fuzzy
msgid "Shaded"
-msgstr "Shader"
+msgstr "Sombreado"
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
msgid "Double Sided"
@@ -22699,9 +22114,8 @@ msgid "No Depth Test"
msgstr ""
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Fixed Size"
-msgstr "Vista Frontal"
+msgstr "Tamaño Fijo"
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
msgid "Alpha Cut"
@@ -22712,119 +22126,98 @@ msgid "Alpha Scissor Threshold"
msgstr ""
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Render Priority"
-msgstr "Activar Prioridad"
+msgstr "Prioridad de Renderización"
#: scene/3d/label_3d.cpp
-#, fuzzy
msgid "Outline Render Priority"
-msgstr "Activar Prioridad"
+msgstr "Prioridad de Renderización del Contorno"
#: scene/3d/label_3d.cpp
-#, fuzzy
msgid "Outline Modulate"
-msgstr "Forzar Modulación en Blanco"
+msgstr "Modular Contorno"
#: scene/3d/label_3d.cpp scene/resources/default_theme/default_theme.cpp
#: scene/resources/dynamic_font.cpp scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Font"
-msgstr "Fuentes"
+msgstr "Fuente"
#: scene/3d/label_3d.cpp scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Horizontal Alignment"
-msgstr "Horizontal Activado"
+msgstr "Alineación Horizontal"
#: scene/3d/label_3d.cpp
-#, fuzzy
msgid "Vertical Alignment"
-msgstr "Filtrar señales"
+msgstr "Alineación Vertical"
#: scene/3d/label_3d.cpp scene/gui/dialogs.cpp scene/gui/label.cpp
-#, fuzzy
msgid "Autowrap"
-msgstr "AutoLoad"
+msgstr "Envoltura Automática"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Indirect Energy"
-msgstr "Colores de Emisión"
+msgstr "Energía Indirecta"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Negative"
-msgstr "GDNative"
+msgstr "Negativo"
#: scene/3d/light.cpp scene/resources/material.cpp
#: scene/resources/visual_shader.cpp
-#, fuzzy
msgid "Specular"
-msgstr "Modo de Regla"
+msgstr "Especular"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Bake Mode"
-msgstr "Modo de Bitmask"
+msgstr "Modo de Bakeo"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Contact"
-msgstr "Seleccionar Color"
+msgstr "Contacto"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Reverse Cull Face"
-msgstr "Restablecer Volumen de Bus"
+msgstr "Eliminar Caras Invertidas"
#: scene/3d/light.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Directional Shadow"
-msgstr "Direcciones"
+msgstr "Sombra Direccional"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Split 1"
-msgstr "Dividir"
+msgstr "Dividir 1"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Split 2"
-msgstr "Dividir"
+msgstr "Dividir 2"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Split 3"
-msgstr "Dividir"
+msgstr "Dividir 3"
#: scene/3d/light.cpp
msgid "Blend Splits"
msgstr "Mezclar Divisiones"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Bias Split Scale"
-msgstr "Usar Ajuste de Escalado"
+msgstr "Escala de División del Sesgo"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Depth Range"
-msgstr "Profundidad"
+msgstr "Rango de Profundidad"
#: scene/3d/light.cpp
msgid "Omni"
msgstr ""
#: scene/3d/light.cpp
-#, fuzzy
msgid "Shadow Mode"
-msgstr "Shader"
+msgstr "Modo de Sombreado"
#: scene/3d/light.cpp
-#, fuzzy
msgid "Shadow Detail"
-msgstr "Mostrar Por Defecto"
+msgstr "Detalle de la Sombra"
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -22836,9 +22229,8 @@ msgid "Spot"
msgstr ""
#: scene/3d/light.cpp
-#, fuzzy
msgid "Angle Attenuation"
-msgstr "Animación"
+msgstr "Atenuación del Ãngulo"
#: scene/3d/mesh_instance.cpp
msgid "Software Skinning"
@@ -22856,43 +22248,38 @@ msgid ""
msgstr ""
#: scene/3d/navigation.cpp scene/resources/curve.cpp
-#, fuzzy
msgid "Up Vector"
-msgstr "Vector"
+msgstr "Vector Superior"
#: scene/3d/navigation.cpp
-#, fuzzy
msgid "Cell Height"
-msgstr "Prueba"
+msgstr "Altura de la Celda"
#: scene/3d/navigation_agent.cpp
msgid "Agent Height Offset"
msgstr ""
#: scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Ignore Y"
-msgstr "[Ignorar]"
+msgstr "Ignorar Y"
#: scene/3d/navigation_agent.cpp
-#, fuzzy
msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
-msgstr "El NavigationAgent sólo puede utilizarse bajo un nodo spatial."
+msgstr ""
+"El NavigationAgent solo puede utilizarse en un nodo padre de tipo Spatial."
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
-#, fuzzy
msgid "NavMesh"
-msgstr "Calcular NavMesh"
+msgstr "NavMesh"
#: scene/3d/navigation_obstacle.cpp
-#, fuzzy
msgid ""
"The NavigationObstacle only serves to provide collision avoidance to a "
"Spatial inheriting parent object."
msgstr ""
-"El NavigationObstacle sólo sirve para evitar la colisión de un objeto "
-"spatial."
+"El NavigationObstacle solo sirve para evitar colisiones en un objeto padre "
+"de tipo Spatial."
#: scene/3d/occluder.cpp
msgid "No shape is set."
@@ -22943,9 +22330,8 @@ msgstr ""
"Billboard esté ajustado a \"Particle Billboard\"."
#: scene/3d/particles.cpp
-#, fuzzy
msgid "Visibility AABB"
-msgstr "Cambiar Visibilidad"
+msgstr "Visibilidad AABB"
#: scene/3d/particles.cpp
msgid "Draw Passes"
@@ -22969,7 +22355,6 @@ msgstr ""
"el recurso Curve de su Path padre."
#: scene/3d/path.cpp
-#, fuzzy
msgid "Rotation Mode"
msgstr "Modo de Rotación"
@@ -22984,65 +22369,56 @@ msgstr ""
"En su lugar, cambia el tamaño en las formas de colisión de los hijos."
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Axis Lock"
-msgstr "Eje"
+msgstr "Bloquear Ejes"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear X"
-msgstr "Lineal"
+msgstr "Lineal X"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Y"
-msgstr "Lineal"
+msgstr "Lineal Y"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Z"
-msgstr "Lineal"
+msgstr "Lineal Z"
#: scene/3d/physics_body.cpp
msgid "Angular X"
-msgstr ""
+msgstr "Angular X"
#: scene/3d/physics_body.cpp
msgid "Angular Y"
-msgstr ""
+msgstr "Angular Y"
#: scene/3d/physics_body.cpp
msgid "Angular Z"
-msgstr ""
+msgstr "Angular Z"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Motion X"
-msgstr "Acción"
+msgstr "Movimiento X"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Motion Y"
-msgstr "Acción"
+msgstr "Movimiento Y"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Motion Z"
-msgstr "Acción"
+msgstr "Movimiento Z"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Joint Constraints"
-msgstr "Constantes"
+msgstr "Restringir Articulaciones"
#: scene/3d/physics_body.cpp scene/3d/physics_joint.cpp
msgid "Impulse Clamp"
msgstr ""
#: scene/3d/physics_body.cpp scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Swing Span"
-msgstr "Guardar Escena"
+msgstr "Expansión de Swing"
#: scene/3d/physics_body.cpp scene/3d/physics_joint.cpp
msgid "Twist Span"
@@ -23054,147 +22430,124 @@ msgid "Relaxation"
msgstr "Relajación"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Enabled"
-msgstr "Filtrar señales"
+msgstr "Límite Angular Activado"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Upper"
-msgstr "Lineal"
+msgstr "Límite Angular Superior"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Lower"
-msgstr "Ortogonal Angular"
+msgstr "Límite Angular Inferior"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Bias"
-msgstr "Lineal"
+msgstr "Sesgo de Límite Angular"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Softness"
-msgstr "Animación"
+msgstr "Límite Angular de Suavizado"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Relaxation"
-msgstr "Animación"
+msgstr "Relajación del Límite Angular"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Limit Upper"
-msgstr "Lineal"
+msgstr "Límite Lineal Superior"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Limit Lower"
-msgstr "Lineal"
+msgstr "Límite Lineal Inferior"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Limit Softness"
-msgstr "Lineal"
+msgstr "Límite Lineal de Suavizado"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Limit Restitution"
-msgstr "Lineal"
+msgstr "Restitución del Límite Lineal"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Limit Damping"
-msgstr "Lineal"
+msgstr "Amortiguación de Límite Lineal"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Restitution"
-msgstr "Animación"
+msgstr "Restitución del Límite Angular"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Limit Damping"
-msgstr "Animación"
+msgstr "Amortiguación de Límite Angular"
#: scene/3d/physics_body.cpp
msgid "X"
-msgstr ""
+msgstr "X"
#: scene/3d/physics_body.cpp
msgid "Y"
-msgstr ""
+msgstr "Y"
#: scene/3d/physics_body.cpp
msgid "Z"
-msgstr ""
+msgstr "Z"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Limit Enabled"
-msgstr "Lineal"
+msgstr "Límite Lineal Activado"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Spring Enabled"
-msgstr "Lineal"
+msgstr "Amortiguador Lineal Activado"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Spring Stiffness"
-msgstr "Lineal"
+msgstr "Rigidez Lineal del Amortiguador"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Spring Damping"
-msgstr "Lineal"
+msgstr "Atenuación Lineal del Amortiguador"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Equilibrium Point"
-msgstr "Lineal"
+msgstr "Punto de Equilibrio Lineal"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Restitution"
-msgstr "Descripción"
+msgstr "Restitución Lineal"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Linear Damping"
-msgstr "Lineal"
+msgstr "Amortiguación Lineal"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Restitution"
-msgstr "Descripción"
+msgstr "Restitución Angular"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Damping"
-msgstr "Animación"
+msgstr "Amortiguación Angular"
#: scene/3d/physics_body.cpp scene/3d/physics_joint.cpp
msgid "ERP"
-msgstr ""
+msgstr "ERP"
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Angular Spring Enabled"
-msgstr "Filtrar señales"
+msgstr "Amortiguación Angular Activada"
#: scene/3d/physics_body.cpp
msgid "Angular Spring Stiffness"
-msgstr ""
+msgstr "Rigidez del Amortiguador Angular"
#: scene/3d/physics_body.cpp
msgid "Angular Spring Damping"
-msgstr ""
+msgstr "Amortiguación Angular del Muelle"
#: scene/3d/physics_body.cpp
msgid "Angular Equilibrium Point"
-msgstr ""
+msgstr "Punto de Equilibrio Angular"
#: scene/3d/physics_body.cpp
msgid "Body Offset"
@@ -23225,9 +22578,8 @@ msgid "Solver"
msgstr ""
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Exclude Nodes"
-msgstr "Eliminar Nodos"
+msgstr "Excluir Nodos"
#: scene/3d/physics_joint.cpp
msgid "Params"
@@ -23238,32 +22590,28 @@ msgid "Angular Limit"
msgstr ""
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Upper"
-msgstr "Mayúsculas"
+msgstr "Superior"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Lower"
-msgstr "Minúsculas"
+msgstr "Inferior"
#: scene/3d/physics_joint.cpp
msgid "Motor"
-msgstr ""
+msgstr "Motor"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Target Velocity"
-msgstr "Vista de Órbita Derecha"
+msgstr "Velocidad del Objetivo"
#: scene/3d/physics_joint.cpp
msgid "Max Impulse"
msgstr "Impulso Máximo"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Limit"
-msgstr "Lineal"
+msgstr "Límite Lineal"
#: scene/3d/physics_joint.cpp
msgid "Upper Distance"
@@ -23274,57 +22622,48 @@ msgid "Lower Distance"
msgstr "Distancia Inferior"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Restitution"
-msgstr "Descripción"
+msgstr "Restitución"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Motion"
-msgstr "Inicializar"
+msgstr "Movimiento Lineal"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Ortho"
-msgstr "Ortogonal Trasera"
+msgstr "Ortogonal Lineal"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Upper Angle"
-msgstr "Mayúsculas"
+msgstr "Ãngulo Superior"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Lower Angle"
-msgstr "Minúsculas"
+msgstr "Ãngulo Inferior"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Angular Motion"
-msgstr "Animación"
+msgstr "Movimiento Angular"
#: scene/3d/physics_joint.cpp
msgid "Angular Ortho"
msgstr "Ortogonal Angular"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Limit X"
-msgstr "Lineal"
+msgstr "Límite Lineal X"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Motor X"
-msgstr "Inicializar"
+msgstr "Motor Lineal X"
#: scene/3d/physics_joint.cpp
msgid "Force Limit"
msgstr "Forzar Límite"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Spring X"
-msgstr "Lineal"
+msgstr "Amortiguación Lineal X"
#: scene/3d/physics_joint.cpp
msgid "Equilibrium Point"
@@ -23340,22 +22679,19 @@ msgstr ""
#: scene/3d/physics_joint.cpp
msgid "Angular Spring X"
-msgstr ""
+msgstr "Amortiguación Angular X"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Limit Y"
-msgstr "Lineal"
+msgstr "Límite Lineal Y"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Motor Y"
-msgstr "Inicializar"
+msgstr "Motor Lineal Y"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Spring Y"
-msgstr "Lineal"
+msgstr "Amortiguación Lineal Y"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit Y"
@@ -23367,22 +22703,19 @@ msgstr ""
#: scene/3d/physics_joint.cpp
msgid "Angular Spring Y"
-msgstr ""
+msgstr "Amortiguación Angular Y"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Limit Z"
-msgstr "Lineal"
+msgstr "Límite Lineal Z"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Motor Z"
-msgstr "Inicializar"
+msgstr "Motor Lineal Z"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Linear Spring Z"
-msgstr "Lineal"
+msgstr "Amortiguación Lineal Z"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit Z"
@@ -23394,7 +22727,7 @@ msgstr ""
#: scene/3d/physics_joint.cpp
msgid "Angular Spring Z"
-msgstr ""
+msgstr "Amortiguación Angular Z"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
@@ -23421,14 +22754,12 @@ msgid "Linked Room"
msgstr "Sala Vinculada"
#: scene/3d/portal.cpp
-#, fuzzy
msgid "Use Default Margin"
-msgstr "Por defecto"
+msgstr "Usar Margen por Defecto"
#: scene/3d/proximity_group.cpp
-#, fuzzy
msgid "Group Name"
-msgstr "Agrupado"
+msgstr "Nombre del Grupo"
#: scene/3d/proximity_group.cpp
msgid "Dispatch Mode"
@@ -23439,47 +22770,40 @@ msgid "Grid Radius"
msgstr "Radio de Cuadrícula"
#: scene/3d/ray_cast.cpp
-#, fuzzy
msgid "Debug Shape"
-msgstr "Depurador"
+msgstr "Depurar Shape"
#: scene/3d/ray_cast.cpp scene/resources/style_box.cpp
msgid "Thickness"
msgstr ""
#: scene/3d/reflection_probe.cpp scene/main/viewport.cpp
-#, fuzzy
msgid "Update Mode"
-msgstr "Modo de Rotación"
+msgstr "Modo de Actualización"
#: scene/3d/reflection_probe.cpp
msgid "Origin Offset"
msgstr "Desplazamiento de Origen"
#: scene/3d/reflection_probe.cpp
-#, fuzzy
msgid "Box Projection"
-msgstr "Proyecto"
+msgstr "Proyección de Cajas"
#: scene/3d/reflection_probe.cpp
-#, fuzzy
msgid "Enable Shadows"
-msgstr "Activar Ajuste"
+msgstr "Activar Sombras"
#: scene/3d/reflection_probe.cpp
-#, fuzzy
msgid "Ambient Color"
-msgstr "Seleccionar Color"
+msgstr "Color de Ambiente"
#: scene/3d/reflection_probe.cpp
-#, fuzzy
msgid "Ambient Energy"
-msgstr "Colores de Emisión"
+msgstr "Energía Ambiental"
#: scene/3d/reflection_probe.cpp
-#, fuzzy
msgid "Ambient Contrib"
-msgstr "Indentar a la Derecha"
+msgstr "Contribución Ambiental"
#: scene/3d/remote_transform.cpp
msgid ""
@@ -23523,9 +22847,8 @@ msgid "Bound"
msgstr ""
#: scene/3d/room_group.cpp
-#, fuzzy
msgid "Roomgroup Priority"
-msgstr "Prioridad"
+msgstr "Prioridad del Roomgroup"
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
@@ -23559,66 +22882,57 @@ msgstr ""
#: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp
#: scene/animation/animation_tree_player.cpp
#: servers/audio/effects/audio_effect_delay.cpp
-#, fuzzy
msgid "Active"
-msgstr "Acción"
+msgstr "Activo"
#: scene/3d/room_manager.cpp
msgid "Roomlist"
msgstr ""
#: scene/3d/room_manager.cpp servers/visual_server.cpp
-#, fuzzy
msgid "PVS"
-msgstr "FPS"
+msgstr "PVS"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "PVS Mode"
-msgstr "Modo desplazamiento lateral"
+msgstr "Modo PVS"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "PVS Filename"
-msgstr "Archivo ZIP"
+msgstr "Nombre del Archivo PVS"
#: scene/3d/room_manager.cpp servers/visual_server.cpp
msgid "Gameplay"
msgstr ""
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "Gameplay Monitor"
-msgstr "Monitor"
+msgstr "Monitor de Juego"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "Use Secondary PVS"
-msgstr "Usar Ajuste de Escalado"
+msgstr "Usar PVS Secundario"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "Merge Meshes"
-msgstr "Malla"
+msgstr "Fusionar Mallas"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "Show Margins"
-msgstr "Mostrar Origen"
+msgstr "Mostrar Márgenes"
#: scene/3d/room_manager.cpp
#, fuzzy
msgid "Debug Sprawl"
-msgstr "Depurar"
+msgstr "Depurar Desorden"
#: scene/3d/room_manager.cpp
msgid "Overlap Warning Threshold"
msgstr ""
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "Preview Camera"
-msgstr "Vista Previa"
+msgstr "Vista previa de la Cámara"
#: scene/3d/room_manager.cpp
msgid "Portal Depth Limit"
@@ -23774,18 +23088,16 @@ msgstr ""
"En su lugar, cambia el tamaño en las formas de colisión de los hijos."
#: scene/3d/spatial.cpp
-#, fuzzy
msgid "Global Translation"
-msgstr "Mantener transformación global"
+msgstr "Transformación Global"
#: scene/3d/spatial.cpp
msgid "Matrix"
-msgstr ""
+msgstr "Matriz"
#: scene/3d/spatial.cpp
-#, fuzzy
msgid "Gizmo"
-msgstr "Gizmos"
+msgstr "Gizmo"
#: scene/3d/spatial_velocity_tracker.cpp
#, fuzzy
@@ -23794,7 +23106,7 @@ msgstr "Fotogramas de Física %"
#: scene/3d/spring_arm.cpp
msgid "Spring Length"
-msgstr ""
+msgstr "Cantidad de Amortiguación"
#: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp
msgid "Opacity"
@@ -24999,19 +24311,16 @@ msgid "Fold Gutter"
msgstr "Plegar Gutter"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Drag And Drop Selection Enabled"
-msgstr "Sólo selección"
+msgstr "Selección de Arrastrar y Soltar Activada"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Hiding Enabled"
-msgstr "Activar"
+msgstr "Ocultación Activada"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Wrap Enabled"
-msgstr "Activar"
+msgstr "Ajuste Activado"
#: scene/gui/text_edit.cpp
msgid "Scroll Vertical"
@@ -25420,60 +24729,60 @@ msgid ""
"Effects.\n"
"HDR will be disabled for this Viewport."
msgstr ""
+"Este Viewport tiene HDR habilitado, pero su uso está establecido en 2D o 2D "
+"sin muestreo.\n"
+"El HDR solo está soportado en los Viewports que tienen su uso establecido en "
+"3D o 3D Sin Efectos.\n"
+"El HDR estará desactivado para esta ventana."
#: scene/main/viewport.cpp
msgid "ARVR"
-msgstr ""
+msgstr "ARVR"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Size Override Stretch"
-msgstr "Elemento de Anulación"
+msgstr "Anulación del Tamaño de Estiramiento"
#: scene/main/viewport.cpp
msgid "Own World"
-msgstr ""
+msgstr "Mundo Propio"
#: scene/main/viewport.cpp scene/resources/world_2d.cpp
msgid "World"
-msgstr ""
+msgstr "Mundo"
#: scene/main/viewport.cpp
msgid "World 2D"
-msgstr ""
+msgstr "Mundo 2D"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Transparent BG"
-msgstr "Transponer"
+msgstr "Fondo Transparente"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Handle Input Locally"
-msgstr "Cambiar Valor de Entrada"
+msgstr "Manejar Entradas Localmente"
#: scene/main/viewport.cpp
msgid "FXAA"
-msgstr ""
+msgstr "FXAA"
#: scene/main/viewport.cpp
#, fuzzy
msgid "Debanding"
-msgstr "Vinculación"
+msgstr "Debanding"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Disable 3D"
-msgstr "Desactivar Elemento"
+msgstr "Desactivar 3D"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Keep 3D Linear"
-msgstr "Izquierda Lineal"
+msgstr "Mantener 3D Lineal"
#: scene/main/viewport.cpp
msgid "Render Direct To Screen"
-msgstr ""
+msgstr "Renderización Directa en Pantalla"
#: scene/main/viewport.cpp
#, fuzzy
@@ -25880,9 +25189,8 @@ msgid "Decrement Pressed"
msgstr ""
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Slider"
-msgstr "Modo de Colisión"
+msgstr "Deslizador"
#: scene/resources/default_theme/default_theme.cpp
msgid "Grabber Area"
@@ -26321,13 +25629,12 @@ msgid "Mono Font"
msgstr "Fuente Principal"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Table H Separation"
-msgstr "Separación de Tabla H"
+msgstr "Separación H de Tabla"
#: scene/resources/default_theme/default_theme.cpp
msgid "Table V Separation"
-msgstr "Separación de Tabla V"
+msgstr "Separación V de Tabla"
#: scene/resources/default_theme/default_theme.cpp
msgid "Margin Left"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index de1187f08f..b37d9dcfd8 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -20,13 +20,14 @@
# M3CG <cgmario1999@gmail.com>, 2021, 2022.
# Manuel González <mgoopazo@gmail.com>, 2021.
# emnrx <emanuelermancia@gmail.com>, 2022.
+# Mau_Restor <restor@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-06-21 15:56+0000\n"
-"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: Mau_Restor <restor@gmail.com>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/"
"godot-engine/godot/es_AR/>\n"
"Language: es_AR\n"
@@ -34,7 +35,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -268,9 +269,8 @@ msgid "Network Peer"
msgstr "Profiler de Red"
#: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp
-#, fuzzy
msgid "Root Node"
-msgstr "Nombre del nodo raíz"
+msgstr "Nodo raíz"
#: core/io/networked_multiplayer_peer.cpp
msgid "Refuse New Connections"
@@ -302,7 +302,7 @@ msgstr ""
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "Array de datos"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
@@ -331,9 +331,8 @@ msgstr ""
"No hay suficientes bytes para decodificar bytes, o el formato es inválido."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Entrada inválida %i (no se transmitió) en la expresión"
+msgstr "Entrada inválida %d (no se transmitió) en la expresión"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -362,7 +361,7 @@ msgstr "En la llamada a '%s':"
#: core/math/random_number_generator.cpp
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Seed"
-msgstr ""
+msgstr "Semilla"
#: core/math/random_number_generator.cpp
#, fuzzy
@@ -371,16 +370,15 @@ msgstr "Estado"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "Cola de mesajes"
#: core/message_queue.cpp
msgid "Max Size (KB)"
-msgstr ""
+msgstr "Tamaño máximo (KB)"
#: core/os/input.cpp
-#, fuzzy
msgid "Mouse Mode"
-msgstr "Modo Mover"
+msgstr "Modo Mouse"
#: core/os/input.cpp
#, fuzzy
@@ -409,9 +407,8 @@ msgid "Meta"
msgstr "Meta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Command"
-msgstr "Comunidad"
+msgstr "Comando"
#: core/os/input_event.cpp
#, fuzzy
@@ -440,7 +437,7 @@ msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
-msgstr ""
+msgstr "Echo"
#: core/os/input_event.cpp scene/gui/base_button.cpp
msgid "Button Mask"
@@ -464,7 +461,7 @@ msgstr "Dobleclick"
#: core/os/input_event.cpp
msgid "Tilt"
-msgstr ""
+msgstr "Inclinación"
#: core/os/input_event.cpp
#, fuzzy
@@ -477,9 +474,8 @@ msgid "Pen Inverted"
msgstr "Invertir"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Relative"
-msgstr "Ajuste Relativo"
+msgstr "Relativo"
#: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp
@@ -537,7 +533,7 @@ msgstr "Velocidad"
#: core/os/input_event.cpp
msgid "Instrument"
-msgstr ""
+msgstr "Instrumento"
#: core/os/input_event.cpp
msgid "Controller Number"
@@ -545,7 +541,7 @@ msgstr "Número de Controlador"
#: core/os/input_event.cpp
msgid "Controller Value"
-msgstr ""
+msgstr "Valor del controlador"
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
@@ -617,9 +613,8 @@ msgstr "Nombre de Directorio de Usuario Personalizado"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Display"
-msgstr "Mostrar Todo"
+msgstr "Mostrar"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
@@ -638,17 +633,15 @@ msgstr "Altura"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Siempre encima"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "Izquierda Ancha"
+msgstr "probar ancho"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "Prueba"
+msgstr "probar altura"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -686,14 +679,12 @@ msgid "Script Templates Search Path"
msgstr "Ruta de Búsqueda de Plantillas de Scripts"
#: core/project_settings.cpp
-#, fuzzy
msgid "Version Control Autoload On Startup"
-msgstr "Sistema de Control de Versiones"
+msgstr "Al iniciar el Sistema de Control de Versiones"
#: core/project_settings.cpp
-#, fuzzy
msgid "Version Control Plugin Name"
-msgstr "Control de Versiones"
+msgstr "Nombre del sistema de control de versiones"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -702,17 +693,15 @@ msgstr "Entrada"
#: core/project_settings.cpp
msgid "UI Accept"
-msgstr ""
+msgstr "Aceptar Interfaz del usuario"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Select"
-msgstr "Seleccionar"
+msgstr "Seleccionar Interfaz de Usuario"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Cancel"
-msgstr "Cancelar"
+msgstr "Cancelar la interfaz de usuario"
#: core/project_settings.cpp
#, fuzzy
@@ -754,12 +743,11 @@ msgstr ""
#: core/project_settings.cpp
msgid "UI Home"
-msgstr ""
+msgstr "Inicio de la interfaz de usuario"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI End"
-msgstr "Al Final"
+msgstr "Al Final de la interfaz de usuario"
#: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp
#: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp
@@ -817,7 +805,7 @@ msgstr "Filtros"
#: core/project_settings.cpp scene/main/viewport.cpp
msgid "Sharpen Intensity"
-msgstr ""
+msgstr "Intensidad de la nitidez"
#: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
@@ -867,7 +855,7 @@ msgstr "Nivel de Compresión"
#: core/project_settings.cpp
msgid "Window Log Size"
-msgstr ""
+msgstr "medida del registro de la ventana"
#: core/project_settings.cpp
msgid "Zlib"
@@ -890,9 +878,8 @@ msgid "TCP"
msgstr "TCP"
#: core/register_core_types.cpp
-#, fuzzy
msgid "Connect Timeout Seconds"
-msgstr "Conexiones al método:"
+msgstr "Tiempo de espera en segundos de la conexion"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
@@ -917,9 +904,8 @@ msgid "Resource"
msgstr "Recursos"
#: core/resource.cpp
-#, fuzzy
msgid "Local To Scene"
-msgstr "Cerrar Escena"
+msgstr "Local a la escena"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp
@@ -1200,9 +1186,8 @@ msgid "Type"
msgstr "Tipo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In Handle"
-msgstr "Setear Handle"
+msgstr "En manejo"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1353,9 +1338,8 @@ msgid "Time (s):"
msgstr "Tiempo (s): "
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Posición del Panel"
+msgstr "Posición:"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -2168,14 +2152,15 @@ msgstr "Favoritos:"
msgid "Recent:"
msgstr "Recientes:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Buscar:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Coincidencias:"
@@ -2235,8 +2220,8 @@ msgstr "Buscar Reemplazo de Recurso:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5645,6 +5630,10 @@ msgid "Drag And Drop Selection"
msgstr "Selección de GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11932,6 +11921,11 @@ msgid "New Animation"
msgstr "Nueva Animación"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrar métodos"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Velocidad:"
diff --git a/editor/translations/et.po b/editor/translations/et.po
index b355c9c343..1f3fe075df 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -2154,14 +2154,15 @@ msgstr "Lemmikud:"
msgid "Recent:"
msgstr "Hiljutised:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Otsi:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Vasted:"
@@ -2217,8 +2218,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5487,6 +5488,10 @@ msgid "Drag And Drop Selection"
msgstr "Kopeeri valik"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11589,6 +11594,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Kustuta animatsioon?"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index fc753e6cb9..2555dfa8d3 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -2116,14 +2116,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2179,8 +2180,8 @@ msgstr "Bilatu ordezko baliabidea:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5393,6 +5394,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11467,6 +11472,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Ezabatu animazioa?"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index f43848b065..a0202d3254 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -2198,14 +2198,15 @@ msgstr "برگزیده‌ها:"
msgid "Recent:"
msgstr "اخیر:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "جستجو:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "تطبیق‌ها:"
@@ -2265,8 +2266,8 @@ msgstr "منبع جایگزینی را جستجو کن:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5549,6 +5550,10 @@ msgid "Drag And Drop Selection"
msgstr "انتخاب شده را حذ٠کن"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11962,6 +11967,11 @@ msgid "New Animation"
msgstr "تغییر نام انیمیشن"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "حالت صاÙÛŒ:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index b83c7d11fa..28b4581d60 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -2216,14 +2216,15 @@ msgstr "Suosikit:"
msgid "Recent:"
msgstr "Viimeaikaiset:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Hae:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Osumat:"
@@ -2283,8 +2284,8 @@ msgstr "Etsi korvaava resurssi:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5676,6 +5677,10 @@ msgid "Drag And Drop Selection"
msgstr "Ruudukon valinta"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11950,6 +11955,11 @@ msgid "New Animation"
msgstr "Uusi animaatio"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Suodata metodeja"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Nopeus:"
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index c4e02900d7..4671a2aeaf 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -2088,14 +2088,15 @@ msgstr "Mga Paborito:"
msgid "Recent:"
msgstr "Kamakailan:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Paghahanap:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2151,8 +2152,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5310,6 +5311,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11321,6 +11326,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Pagulit ng Animation"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index e4f5a2feff..85a3e54c1d 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -2218,14 +2218,15 @@ msgstr "Favoris :"
msgid "Recent:"
msgstr "Récents :"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Rechercher :"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Correspondances :"
@@ -2285,8 +2286,8 @@ msgstr "Recherche ressource de remplacement :"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5675,6 +5676,10 @@ msgid "Drag And Drop Selection"
msgstr "Sélection de la GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Apparence"
@@ -11916,6 +11921,11 @@ msgid "New Animation"
msgstr "Nouvelle animation"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrer les méthodes"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Vitesse :"
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index db42dda6ed..17fc0b03fa 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -2095,14 +2095,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Cuardach:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2158,8 +2159,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5304,6 +5305,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11293,6 +11298,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "CrannBeochan"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/gl.po b/editor/translations/gl.po
index b42b50e5a7..191093a45d 100644
--- a/editor/translations/gl.po
+++ b/editor/translations/gl.po
@@ -2196,14 +2196,15 @@ msgstr "Favoritos:"
msgid "Recent:"
msgstr "Recente:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Buscar:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Coincidencias:"
@@ -2263,8 +2264,8 @@ msgstr "Buscar Recurso de Substitución:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5656,6 +5657,10 @@ msgid "Drag And Drop Selection"
msgstr "Encadrar Selección"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11904,6 +11909,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrar métodos"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Velocidade:"
diff --git a/editor/translations/he.po b/editor/translations/he.po
index a89d117ead..2003351f93 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -2167,14 +2167,15 @@ msgstr "מועדפי×:"
msgid "Recent:"
msgstr "×חרוני×:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "חיפוש:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "הת×מות:"
@@ -2234,8 +2235,8 @@ msgstr "חיפוש מש×ב חלופי:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5571,6 +5572,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap מילוי הבחירה"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11959,6 +11964,11 @@ msgstr "×©× ×”× ×¤×©×” חדשה:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
#, fuzzy
+msgid "Filter animations"
+msgstr "מ×פייני פריט."
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
msgid "Speed:"
msgstr "מהירות (FPS):"
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index a598e43071..7faa61ab12 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -2155,14 +2155,15 @@ msgstr "पसंदीदा:"
msgid "Recent:"
msgstr "हाल ही में किया:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "खोज:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "à¤à¤• जैसा:"
@@ -2222,8 +2223,8 @@ msgstr "खोज रिपà¥à¤²à¥‡à¤¸à¤®à¥‡à¤‚ट संसाधन:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5576,6 +5577,10 @@ msgid "Drag And Drop Selection"
msgstr "सभी खंड"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11760,6 +11765,11 @@ msgid "New Animation"
msgstr "à¤à¤¨à¤¿à¤®à¥‡à¤¶à¤¨ लूप"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "à¤à¤¨à¤¿à¤®à¥‡à¤¶à¤¨"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index 61aeaeeb10..6d2b3b07da 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -6,12 +6,13 @@
# Patik <patrikfs5@gmail.com>, 2019.
# Nikola Bunjevac <nikola.bunjevac@gmail.com>, 2019, 2020.
# LeoClose <leoclose575@gmail.com>, 2020, 2021.
+# Filip <fhomolka@protonmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-08-13 19:05+0000\n"
-"Last-Translator: LeoClose <leoclose575@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: Filip <fhomolka@protonmail.com>\n"
"Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hr/>\n"
"Language: hr\n"
@@ -19,11 +20,11 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
-msgstr ""
+msgstr "UpravljaÄki program za Tablet"
#: core/bind/core_bind.cpp
msgid "Clipboard"
@@ -39,73 +40,77 @@ msgid "Exit Code"
msgstr ""
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "V-Sync Enabled"
-msgstr "Omogući"
+msgstr "V-Sync Omogućen"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "V-Sync preko Kompozitora"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
-msgstr ""
+msgstr "Delta Ublažavanje"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode"
-msgstr ""
+msgstr "NaÄin niske upotrebe procesora"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode Sleep (µsec)"
-msgstr ""
+msgstr "Stanje mirovanja u naÄinu koriÅ¡tenja niskog procesora (μsec)"
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
msgid "Keep Screen On"
-msgstr ""
+msgstr "Zadrži zaslon ukljuÄenim"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Min Window Size"
-msgstr "Glavna skripta:"
+msgstr "Min. veliÄina prozora"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Max Window Size"
-msgstr "Glavna skripta:"
+msgstr "Maks. veliÄina prozora"
#: core/bind/core_bind.cpp
msgid "Screen Orientation"
-msgstr ""
+msgstr "Orijentacija zaslona"
#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp
#: platform/uwp/os_uwp.cpp
+#, fuzzy
msgid "Window"
-msgstr ""
+msgstr "Prozor"
#: core/bind/core_bind.cpp core/project_settings.cpp
+#, fuzzy
msgid "Borderless"
-msgstr ""
+msgstr "Bez obruba"
#: core/bind/core_bind.cpp
+#, fuzzy
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "Omogućena prozirnost po pikselu"
#: core/bind/core_bind.cpp core/project_settings.cpp
+#, fuzzy
msgid "Fullscreen"
-msgstr ""
+msgstr "Cijeli zaslon"
#: core/bind/core_bind.cpp
+#, fuzzy
msgid "Maximized"
-msgstr ""
+msgstr "Maksimiziran"
#: core/bind/core_bind.cpp
+#, fuzzy
msgid "Minimized"
-msgstr ""
+msgstr "Minimiziran"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
+#, fuzzy
msgid "Resizable"
-msgstr ""
+msgstr "Mogućnost promjene veliÄine"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
@@ -114,7 +119,7 @@ msgstr ""
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
msgid "Position"
-msgstr "Stvori"
+msgstr "Pozicija"
#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp
#: main/main.cpp modules/gridmap/grid_map.cpp
@@ -125,8 +130,9 @@ msgstr "Stvori"
#: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
+#, fuzzy
msgid "Size"
-msgstr ""
+msgstr "VeliÄina"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
@@ -135,25 +141,27 @@ msgstr ""
#: core/bind/core_bind.cpp
#, fuzzy
msgid "Editor Hint"
-msgstr "(Editor Onemogućen)"
+msgstr "Savjet Urednika"
#: core/bind/core_bind.cpp
+#, fuzzy
msgid "Print Error Messages"
-msgstr ""
+msgstr "Ispis poruka o pogreškama"
#: core/bind/core_bind.cpp
#, fuzzy
msgid "Iterations Per Second"
-msgstr "NaÄin Interpolacije"
+msgstr "Iteracije u sekundi"
#: core/bind/core_bind.cpp
+#, fuzzy
msgid "Target FPS"
-msgstr ""
+msgstr "Ciljani FPS"
#: core/bind/core_bind.cpp
#, fuzzy
msgid "Time Scale"
-msgstr "Dubina"
+msgstr "Vremenska skala"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Physics Jitter Fix"
@@ -2125,14 +2133,15 @@ msgstr "Favoriti:"
msgid "Recent:"
msgstr "Nedavno:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Pretraga:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Podudaranja:"
@@ -2192,8 +2201,8 @@ msgstr "Traži zamjenu resursa:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5395,6 +5404,10 @@ msgid "Drag And Drop Selection"
msgstr "Izbriši Odabir"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11479,6 +11492,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Obrisati Animaciju?"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index 9f0d894b2a..cc7024a260 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -2226,14 +2226,15 @@ msgstr "Kedvencek:"
msgid "Recent:"
msgstr "Legutóbbi:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Keresés:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Egyezések:"
@@ -2293,8 +2294,8 @@ msgstr "Csere Forrás Keresése:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5684,6 +5685,10 @@ msgid "Drag And Drop Selection"
msgstr "Kijelölés Keretezése"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11933,6 +11938,11 @@ msgid "New Animation"
msgstr "Új animáció"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Metódusok szűrése"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 24547a7464..8c447326e3 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -39,13 +39,14 @@
# ProgrammerIndonesia 44 <elo.jhy@gmail.com>, 2022.
# Rizky Ramadhan <rizkyterm@gmail.com>, 2022.
# Primananda Kurnia <primakurnia71@gmail.com>, 2022.
+# FellowMustard <rachmawanng33@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-09 21:12+0000\n"
-"Last-Translator: yusuf afandi <afandi.yusuf.04@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: FellowMustard <rachmawanng33@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot/id/>\n"
"Language: id\n"
@@ -53,7 +54,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -1206,7 +1207,7 @@ msgstr "Atur Pegangan"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
msgid "Stream"
-msgstr ""
+msgstr "Arus"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -2158,14 +2159,15 @@ msgstr "Favorit:"
msgid "Recent:"
msgstr "Saat ini:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Cari:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Kecocokan:"
@@ -2225,8 +2227,8 @@ msgstr "Cari Resource Pengganti:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5616,6 +5618,10 @@ msgid "Drag And Drop Selection"
msgstr "Isi Seleksi GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Penampilan"
@@ -11849,6 +11855,11 @@ msgid "New Animation"
msgstr "Animasi Baru"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filter method"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Kecepatan:"
diff --git a/editor/translations/is.po b/editor/translations/is.po
index b7eb0e4b88..7a990ebd6b 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -2140,14 +2140,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2203,8 +2204,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5381,6 +5382,10 @@ msgid "Drag And Drop Selection"
msgstr "Allt úrvalið"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11444,6 +11449,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Stillið breyting á:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/it.po b/editor/translations/it.po
index 36757b891d..1d89d28a99 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -69,13 +69,15 @@
# Federico Caprini <caprinifede@gmail.com>, 2022.
# Alessandro Casalino <alessandro.casalino93@gmail.com>, 2022.
# conecat <ilgrandemax190@gmail.com>, 2022.
+# Gico2006 <gradaellig@protonmail.com>, 2022.
+# ale piccia <picciatialessio2@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-04 05:16+0000\n"
-"Last-Translator: conecat <ilgrandemax190@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: ale piccia <picciatialessio2@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
"Language: it\n"
@@ -83,7 +85,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -374,7 +376,6 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Byte insufficienti per decodificarli o formato non valido."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
msgstr "Input %d non valido (assente) nell'espressione"
@@ -425,7 +426,7 @@ msgstr "Modalità Mouse"
#: core/os/input.cpp
msgid "Use Accumulated Input"
-msgstr "Usa Input Accumulato"
+msgstr "Usa Input Accumulati"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
@@ -671,14 +672,12 @@ msgid "Always On Top"
msgstr "Sempre In Primo Piano"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "Larghezza Test"
+msgstr "Test Larghezza"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "Altezza Test"
+msgstr "Test Altezza"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -713,14 +712,12 @@ msgid "Script Templates Search Path"
msgstr "Percorso di Ricerca dei Template di Script"
#: core/project_settings.cpp
-#, fuzzy
msgid "Version Control Autoload On Startup"
-msgstr "Autocaricamento all'Avvio"
+msgstr "Caricamento automatico del controllo di versione all'avvio"
#: core/project_settings.cpp
-#, fuzzy
msgid "Version Control Plugin Name"
-msgstr "Controllo della versione"
+msgstr "Nome del plugin di controllo della versione"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -1210,14 +1207,12 @@ msgid "Type"
msgstr "Tipo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In Handle"
-msgstr "Imposta Maniglia"
+msgstr "In gestione"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out Handle"
-msgstr "Imposta Maniglia"
+msgstr "Non gestire"
#: editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1406,19 +1401,16 @@ msgid "Stream:"
msgstr "Stream"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "Riavvia (s):"
+msgstr "inizia:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "Fade In (s):"
+msgstr "finisci:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Animazioni:"
+msgstr "clip delle animazioni:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -2173,14 +2165,15 @@ msgstr "Preferiti:"
msgid "Recent:"
msgstr "Recenti:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Cerca:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Corrispondenze:"
@@ -2240,8 +2233,8 @@ msgstr "Cerca risorsa di rimpiazzo:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2250,7 +2243,7 @@ msgstr "Apri"
#: editor/dependency_editor.cpp
msgid "Owners of: %s (Total: %d)"
-msgstr ""
+msgstr "proprietario di: %s (Totale: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2607,9 +2600,8 @@ msgid "There is no '%s' file."
msgstr "File \"%s\" assente."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "Disposizione"
+msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2850,9 +2842,8 @@ msgid "Save PCK"
msgstr "Salva PCK"
#: editor/editor_export.cpp
-#, fuzzy
msgid "Cannot create file \"%s\"."
-msgstr "Impossibile creare la cartella."
+msgstr "impossibile creare il file \"%s\"."
#: editor/editor_export.cpp
#, fuzzy
@@ -2860,9 +2851,8 @@ msgid "Failed to export project files."
msgstr "Impossibile esportare i file del progetto"
#: editor/editor_export.cpp
-#, fuzzy
msgid "Can't open file to read from path \"%s\"."
-msgstr "Impossibile aprire il file in scrittura:"
+msgstr "impossibile aprire file da leggere dalla path \"%s\"."
#: editor/editor_export.cpp
#, fuzzy
@@ -5582,6 +5572,10 @@ msgid "Drag And Drop Selection"
msgstr "Selezione GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Aspetto"
@@ -11739,6 +11733,11 @@ msgid "New Animation"
msgstr "Nuova Animazione"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Modalità di filtraggio"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Velocità:"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 5c6358a4c4..a40939f777 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -2180,14 +2180,15 @@ msgstr "ãŠæ°—ã«å…¥ã‚Š:"
msgid "Recent:"
msgstr "最近:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "検索:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "一致:"
@@ -2247,8 +2248,8 @@ msgstr "ç½®æ›ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’検索:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5582,6 +5583,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap ã®é¸æŠž"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "外観"
@@ -11777,6 +11782,11 @@ msgid "New Animation"
msgstr "æ–°è¦ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "メソッドを絞り込む"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "速度:"
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index f67e7c0bdd..ae98d76c31 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -2195,14 +2195,15 @@ msgstr "სáƒáƒ§áƒ•áƒáƒ áƒšáƒ”ბი:"
msgid "Recent:"
msgstr "ბáƒáƒšáƒ:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "ძებნáƒ:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "დáƒáƒ›áƒ—ხვევები:"
@@ -2264,8 +2265,8 @@ msgstr "ჩáƒáƒ›áƒœáƒáƒªáƒ•ლებელი რესურსის ძიá
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5510,6 +5511,10 @@ msgid "Drag And Drop Selection"
msgstr "ყველრმáƒáƒœáƒ˜áƒ¨áƒœáƒ•áƒ"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11727,6 +11732,11 @@ msgid "New Animation"
msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒžáƒ¢áƒ˜áƒ›áƒ˜áƒ–áƒáƒªáƒ˜áƒ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "ფუნქციები:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/km.po b/editor/translations/km.po
index 2da1ccac99..4141c021e2 100644
--- a/editor/translations/km.po
+++ b/editor/translations/km.po
@@ -2071,14 +2071,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2134,8 +2135,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5269,6 +5270,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11240,6 +11245,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Key(s) ដែលបានជ្រើសស្ទួន"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index ff2f4ecb80..af0b7e99a5 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -2123,14 +2123,15 @@ msgstr "ì¦ê²¨ì°¾ê¸°:"
msgid "Recent:"
msgstr "최근 기ë¡:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "검색:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "ì¼ì¹˜í•¨:"
@@ -2190,8 +2191,8 @@ msgstr "대체 리소스 검색:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5482,6 +5483,10 @@ msgid "Drag And Drop Selection"
msgstr "그리드맵 ì„ íƒ"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "모습"
@@ -11681,6 +11686,11 @@ msgid "New Animation"
msgstr "새 애니메ì´ì…˜"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "메서드 필터"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "ì†ë„:"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index 8daa544db9..3b1140192a 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -2178,14 +2178,15 @@ msgstr "MÄ—gstamiausi:"
msgid "Recent:"
msgstr "Naujausi:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Ieškoti:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2241,8 +2242,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5487,6 +5488,10 @@ msgid "Drag And Drop Selection"
msgstr "Visas Pasirinkimas"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11716,6 +11721,11 @@ msgid "New Animation"
msgstr "Animacija"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrai..."
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 2dabcb40bf..f134fd5b48 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -2173,14 +2173,15 @@ msgstr "Favorīti:"
msgid "Recent:"
msgstr "Nesenie:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Meklēt:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Sakritības:"
@@ -2240,8 +2241,8 @@ msgstr "MeklÄ“t aizstÄjÄ“ja resursu:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5558,6 +5559,10 @@ msgid "Drag And Drop Selection"
msgstr "Režģkartes izvēle"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11644,6 +11649,11 @@ msgid "New Animation"
msgstr "Jauna animÄcija"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "animÄcija"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/mk.po b/editor/translations/mk.po
index ef9a504af6..a3390bd895 100644
--- a/editor/translations/mk.po
+++ b/editor/translations/mk.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
"Last-Translator: Kristijan Fremen Velkovski <me@krisfremen.com>\n"
"Language-Team: Macedonian <https://hosted.weblate.org/projects/godot-engine/"
"godot/mk/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -1255,7 +1255,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "Фукнции:"
#: editor/animation_track_editor.cpp
msgid "Audio Clips:"
@@ -1358,33 +1358,33 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "Континуирана"
#: editor/animation_track_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "ДиÑкретна"
#: editor/animation_track_editor.cpp
msgid "Trigger"
-msgstr ""
+msgstr "Чкрапало"
#: editor/animation_track_editor.cpp scene/3d/baked_lightmap.cpp
msgid "Capture"
-msgstr ""
+msgstr "Снимање"
#: editor/animation_track_editor.cpp
msgid "Nearest"
-msgstr ""
+msgstr "ÐајблиÑку"
#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp scene/2d/physics_body_2d.cpp
#: scene/3d/physics_body.cpp
msgid "Linear"
-msgstr ""
+msgstr "Линеарна"
#: editor/animation_track_editor.cpp
msgid "Cubic"
-msgstr ""
+msgstr "Кубни"
#: editor/animation_track_editor.cpp
msgid "Clamp Loop Interp"
@@ -1462,7 +1462,7 @@ msgstr ""
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Create"
-msgstr ""
+msgstr "Создади"
#: editor/animation_track_editor.cpp
msgid "Anim Insert"
@@ -1763,7 +1763,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "ОчиÑти"
#: editor/animation_track_editor.cpp
msgid "Scale Ratio:"
@@ -1840,7 +1840,7 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Замени"
#: editor/code_editor.cpp
msgid "Replace All"
@@ -1853,7 +1853,7 @@ msgstr ""
#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp
#: editor/plugins/text_editor.cpp
msgid "Standard"
-msgstr ""
+msgstr "Стандардно"
#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp
msgid "Toggle Scripts Panel"
@@ -1879,7 +1879,7 @@ msgstr ""
#: editor/code_editor.cpp modules/gdscript/gdscript.cpp
msgid "Warnings"
-msgstr ""
+msgstr "Предупредувања"
#: editor/code_editor.cpp
msgid "Line and column numbers."
@@ -1921,7 +1921,7 @@ msgstr ""
#: editor/plugins/item_list_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Add"
-msgstr ""
+msgstr "Додади"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp
@@ -1931,7 +1931,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp
#: editor/project_settings_editor.cpp
msgid "Remove"
-msgstr ""
+msgstr "Избриши"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
@@ -1948,11 +1948,11 @@ msgstr ""
#: editor/connections_dialog.cpp scene/3d/room_manager.cpp
#: servers/visual_server.cpp
msgid "Advanced"
-msgstr ""
+msgstr "Ðапредно"
#: editor/connections_dialog.cpp
msgid "Deferred"
-msgstr ""
+msgstr "Одложено"
#: editor/connections_dialog.cpp
msgid ""
@@ -2080,14 +2080,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2143,8 +2144,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5286,6 +5287,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11268,6 +11273,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "СвојÑтва на анимацијата."
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index 1b5bc9e68f..4cb867c040 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -2090,14 +2090,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2153,8 +2154,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5302,6 +5303,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11290,6 +11295,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index 8dffed5d4e..47b8bd3f86 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -2091,14 +2091,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2154,8 +2155,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5292,6 +5293,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11278,6 +11283,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index caef354c6c..055e18e0bc 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -2101,14 +2101,15 @@ msgstr "Kegemaran:"
msgid "Recent:"
msgstr "Terkini:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Cari:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Padanan:"
@@ -2168,8 +2169,8 @@ msgstr "Cari Penggantian Sumber:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5551,6 +5552,10 @@ msgid "Drag And Drop Selection"
msgstr "Semua Pilihan"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11733,6 +11738,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Padam Animasi?"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index 68de0259c2..dac373fdc7 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -2205,14 +2205,15 @@ msgstr "Favoritter:"
msgid "Recent:"
msgstr "Nylige:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Søk:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Treff:"
@@ -2274,8 +2275,8 @@ msgstr "Søk Erstatningsressurs:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5735,6 +5736,10 @@ msgid "Drag And Drop Selection"
msgstr "Slett Valgte"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12215,6 +12220,11 @@ msgstr "Animasjon"
#: editor/plugins/sprite_frames_editor_plugin.cpp
#, fuzzy
+msgid "Filter animations"
+msgstr "Lim inn Noder"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
msgid "Speed:"
msgstr "Hastighet (FPS):"
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index 756bf78add..40e0ddfb78 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -2270,14 +2270,15 @@ msgstr "Favorieten:"
msgid "Recent:"
msgstr "Onlangs:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Zoeken:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Overeenkomsten:"
@@ -2337,8 +2338,8 @@ msgstr "Bronvervanging zoeken:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5728,6 +5729,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap-selectie vullen"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12068,6 +12073,11 @@ msgid "New Animation"
msgstr "Nieuwe animatie"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filter methoden"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Snelheid:"
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 264d623676..180abba988 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -2176,14 +2176,15 @@ msgstr "Ulubione:"
msgid "Recent:"
msgstr "Ostatnie:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Szukaj:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "PasujÄ…ce:"
@@ -2243,8 +2244,8 @@ msgstr "Szukaj zastępczego zasobu:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5629,6 +5630,10 @@ msgid "Drag And Drop Selection"
msgstr "Wybór GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "WyglÄ…d"
@@ -11902,6 +11907,11 @@ msgid "New Animation"
msgstr "Nowa animacja"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtruj metody"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Szybkość:"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index 5c33524652..337e5af5c0 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -2165,14 +2165,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2228,8 +2229,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5474,6 +5475,10 @@ msgid "Drag And Drop Selection"
msgstr "Yar, Blow th' Selected Down!"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11705,6 +11710,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Paste yer Node"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index 0b2fa35ae5..db7171b3c6 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -25,13 +25,14 @@
# El_ExpertPlayer <xpertnathan37@gmail.com>, 2022.
# Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>, 2022.
# Ednaldo Pereira Confia <filat51823@storypo.com>, 2022.
+# Zé Beato Página Oficial <zebeato@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-11 21:32+0000\n"
-"Last-Translator: Ednaldo Pereira Confia <filat51823@storypo.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: Zé Beato Página Oficial <zebeato@gmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot/pt/>\n"
"Language: pt\n"
@@ -2109,14 +2110,15 @@ msgstr "Favoritos:"
msgid "Recent:"
msgstr "Recente:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Procurar:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Correspondências:"
@@ -2176,8 +2178,8 @@ msgstr "Procurar Recurso de substituição:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2931,9 +2933,8 @@ msgid "The given export path doesn't exist."
msgstr "O caminho de exportação não existe:"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-#, fuzzy
msgid "Template file not found: \"%s\"."
-msgstr "Ficheiro Modelo não encontrado:"
+msgstr "Ficheiro Modelo não encontrado"
#: editor/editor_export.cpp
#, fuzzy
@@ -5538,6 +5539,10 @@ msgid "Drag And Drop Selection"
msgstr "Seleção de GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Aparência"
@@ -11721,6 +11726,11 @@ msgid "New Animation"
msgstr "Nova Animação"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Métodos de filtro"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Velocidade:"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index a812335e4b..5d2b642352 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -142,13 +142,15 @@
# lucas rossy brasil coelho <lucasrossy270@gmail.com>, 2022.
# Kaycke <kaycke@ymail.com>, 2022.
# Ednaldo Pereira Confia <filat51823@storypo.com>, 2022.
+# Mauricio <mauricio.fidalgo1@gmail.com>, 2022.
+# Felipe Kinoshita <kinofhek@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2022-07-16 06:20+0000\n"
-"Last-Translator: Cearaj <pmoraisleal@gmail.com>\n"
+"PO-Revision-Date: 2022-07-27 13:26+0000\n"
+"Last-Translator: Felipe Kinoshita <kinofhek@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -361,7 +363,7 @@ msgstr "Página lida adiante"
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr "Modo de bloqueio ativado"
+msgstr "Modo de Bloqueio Ativado"
#: core/io/http_client.cpp
msgid "Connection"
@@ -579,9 +581,8 @@ msgid "Pressure"
msgstr "Pressão"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pen Inverted"
-msgstr "Inverter"
+msgstr "Caneta Invertida (\"Borracha\")"
#: core/os/input_event.cpp
msgid "Relative"
@@ -1120,7 +1121,7 @@ msgstr "Máximo de luzes renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Reflections"
-msgstr "Reflexões máximas renderizáveis"
+msgstr "Máximo de Reflexões Renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
@@ -1278,14 +1279,12 @@ msgid "Type"
msgstr "Tipo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In Handle"
-msgstr "Definir Manipulador"
+msgstr "Manipulador de Entrada"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out Handle"
-msgstr "Definir Manipulador"
+msgstr "Manipulador de Saída"
#: editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1296,11 +1295,11 @@ msgstr "Fluxo"
#: editor/animation_track_editor.cpp
msgid "Start Offset"
-msgstr "Iniciar deslocamento"
+msgstr "Deslocamento Inicial"
#: editor/animation_track_editor.cpp
msgid "End Offset"
-msgstr "Terminar deslocamento"
+msgstr "Deslocamento Final"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_scene.cpp
@@ -1314,7 +1313,7 @@ msgstr "Animação"
#: editor/animation_track_editor.cpp
msgid "Easing"
-msgstr "Facilitar Entrada-Saída"
+msgstr "Suavização"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Time"
@@ -1453,18 +1452,16 @@ msgid "(Invalid, expected type: %s)"
msgstr "(Inválido, tipo esperado: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Facilitar Entrada-Saída:"
+msgstr "Suavizar:"
#: editor/animation_track_editor.cpp
msgid "In-Handle:"
-msgstr "Definir Manipulador:"
+msgstr "Manipulador de Entrada:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "Definir Manipulador:"
+msgstr "Manipulador de Saída:"
#: editor/animation_track_editor.cpp
msgid "Stream:"
@@ -2110,7 +2107,7 @@ msgstr ""
#: editor/connections_dialog.cpp scene/resources/texture.cpp
msgid "Oneshot"
-msgstr "Oneshot"
+msgstr "Só Uma Vez"
#: editor/connections_dialog.cpp
msgid "Disconnects the signal after its first emission."
@@ -2229,14 +2226,15 @@ msgstr "Favoritos:"
msgid "Recent:"
msgstr "Recente:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Pesquisar:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Correspondências:"
@@ -2296,8 +2294,8 @@ msgstr "Buscar Recurso para Substituição:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2420,7 +2418,7 @@ msgstr "Desenvolvedor-chefe"
#: editor/editor_about.cpp
msgctxt "Job Title"
msgid "Project Manager"
-msgstr "Gerenciador de Projeto"
+msgstr "Gestor de Projeto"
#: editor/editor_about.cpp
msgid "Developers"
@@ -2993,7 +2991,7 @@ msgstr "64 Bits"
#: editor/editor_export.cpp
msgid "Embed PCK"
-msgstr "Incorporar PCK"
+msgstr "PCK Incorporado"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "Texture Format"
@@ -3016,9 +3014,8 @@ msgid "ETC2"
msgstr "ETC2"
#: editor/editor_export.cpp
-#, fuzzy
msgid "No BPTC Fallbacks"
-msgstr "Sem Fallbacks do BPTC"
+msgstr "Sem Fallbacks para imagens BPTC"
#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -3673,9 +3670,8 @@ msgid "Property:"
msgstr "Propriedade:"
#: editor/editor_inspector.cpp editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Label"
-msgstr "Etiqueta"
+msgstr "Rótulo"
#: editor/editor_inspector.cpp editor/editor_spin_slider.cpp
#: scene/resources/default_theme/default_theme.cpp
@@ -4391,11 +4387,11 @@ msgstr "Abas de Cena"
#: editor/editor_node.cpp
msgid "Always Show Close Button"
-msgstr "Sempre mostrar o botão de fechar."
+msgstr "Sempre Exibir o Botão de Fechar"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Resize If Many Tabs"
-msgstr "Redimensionar se houver muitas guias"
+msgstr "Redimensionar se Houver Muitas Guias"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Minimum Width"
@@ -5102,7 +5098,7 @@ msgstr "Tempo Médio (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr "Frame %"
+msgstr "Quadro %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
@@ -5147,12 +5143,11 @@ msgstr "Depurador"
#: editor/editor_profiler.cpp
msgid "Profiler Frame History Size"
-msgstr ""
+msgstr "Tamanho de histórico disponível no \"Profiler\""
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Profiler Frame Max Functions"
-msgstr "Renomear Função"
+msgstr "Máximo de funções por quadro no \"Profiler\""
#: editor/editor_properties.cpp
msgid "Edit Text:"
@@ -5285,20 +5280,17 @@ msgstr "Novo %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Base Type"
-msgstr "Mudar Tipo Base"
+msgstr "Tipo Base"
#: editor/editor_resource_picker.cpp
-#, fuzzy
msgid "Edited Resource"
-msgstr "Adicionar Recurso"
+msgstr "Recurso Editado"
#: editor/editor_resource_picker.cpp scene/gui/line_edit.cpp
#: scene/gui/slider.cpp scene/gui/spin_box.cpp
-#, fuzzy
msgid "Editable"
-msgstr "Item Editável"
+msgstr "Editável"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New Script"
@@ -5324,9 +5316,8 @@ msgstr ""
"predefinição existente como executável."
#: editor/editor_run_native.cpp
-#, fuzzy
msgid "Project Run"
-msgstr "Projeto"
+msgstr "Executar Projeto"
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -5353,73 +5344,68 @@ msgid "Did you forget the '_run' method?"
msgstr "Você esqueceu o método '_run'?"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Editor Language"
-msgstr "Layout do Editor"
+msgstr "Linguagem do Editor"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Display Scale"
-msgstr "Exibir Tudo"
+msgstr "Escala de Exibição"
#: editor/editor_settings.cpp
msgid "Custom Display Scale"
-msgstr ""
+msgstr "Escala de Exibição Customizada"
#: editor/editor_settings.cpp
msgid "Main Font Size"
-msgstr ""
+msgstr "Tamanho de Fonte Principal"
#: editor/editor_settings.cpp
msgid "Code Font Size"
-msgstr ""
+msgstr "Tamanho de Fonte (Tipo) no Código"
#: editor/editor_settings.cpp
msgid "Font Antialiased"
-msgstr ""
+msgstr "Fonte Com Serrilhado Suavizado"
#: editor/editor_settings.cpp
msgid "Font Hinting"
-msgstr ""
+msgstr "Suavização de Fonte"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Main Font"
-msgstr "Cena Principal"
+msgstr "Fonte Principal"
#: editor/editor_settings.cpp
msgid "Main Font Bold"
-msgstr ""
+msgstr "Fonte Principal (Negrito)"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Code Font"
-msgstr "Adicionar Ponto de Nó"
+msgstr "Fonte para Código"
#: editor/editor_settings.cpp
msgid "Dim Editor On Dialog Popup"
-msgstr ""
+msgstr "Escurecer o Editor ao Abir Janela Popup"
#: editor/editor_settings.cpp main/main.cpp
msgid "Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "Tempo de Espera em Modo de Hibernação (µseg)"
#: editor/editor_settings.cpp
msgid "Unfocused Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "Tempo de Espera em Modo de Hibernação Quando Fora de Foco (µseg)"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Separate Distraction Mode"
-msgstr "Modo Sem Distrações"
+msgstr "Modo \"Sem Distrações\" Desacoplado"
#: editor/editor_settings.cpp
msgid "Automatically Open Screenshots"
-msgstr ""
+msgstr "Abrir Capturas de Tela Automaticamente"
#: editor/editor_settings.cpp
msgid "Max Array Dictionary Items Per Page"
-msgstr ""
+msgstr "Máximo de Itens em Arrays Dicionários Por Página"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp scene/gui/control.cpp
@@ -5433,59 +5419,51 @@ msgstr "Predefinição"
#: editor/editor_settings.cpp
msgid "Icon And Font Color"
-msgstr ""
+msgstr "Cor da Fonte e do Ãcone"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Base Color"
-msgstr "Cores"
+msgstr "Cor Base"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Accent Color"
-msgstr "Escolher Cor"
+msgstr "Cor de Destaque"
#: editor/editor_settings.cpp scene/resources/environment.cpp
msgid "Contrast"
-msgstr ""
+msgstr "Contraste"
#: editor/editor_settings.cpp
msgid "Relationship Line Opacity"
-msgstr ""
+msgstr "Opacidade da Linha de Relacionamento"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Highlight Tabs"
-msgstr "Salvando mapas de luz"
+msgstr "Abas de Destaque"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Border Size"
-msgstr "Pixels de Borda"
+msgstr "Tamanho da Borda"
#: editor/editor_settings.cpp
msgid "Use Graph Node Headers"
-msgstr ""
+msgstr "Utilizar Cabeçalhos de Nós para Gráficos"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Additional Spacing"
-msgstr "Loop da Animação"
+msgstr "Espaçamento Adicional"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Custom Theme"
-msgstr "Tema do Editor"
+msgstr "Tema Personalizado"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Show Script Button"
-msgstr "Botão direito da roda"
+msgstr "Botão de Exibir Script"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Directories"
-msgstr "Direções"
+msgstr "Diretórios"
#: editor/editor_settings.cpp
msgid "Autoscan Project Path"
@@ -5496,23 +5474,20 @@ msgid "Default Project Path"
msgstr "Caminho Padrão do Projeto"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "On Save"
-msgstr "Salvar"
+msgstr "Ao Salvar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Compress Binary Resources"
-msgstr "Copiar Recurso"
+msgstr "Comprimir Recursos Binários"
#: editor/editor_settings.cpp
msgid "Safe Save On Backup Then Rename"
-msgstr ""
+msgstr "Salvar de Forma Segura Como Backup e Então Renomear"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "File Dialog"
-msgstr "Diálogo XForm"
+msgstr "Janela de Arquivo"
#: editor/editor_settings.cpp
msgid "Thumbnail Size"
@@ -5520,82 +5495,73 @@ msgstr "Tamanho da Miniatura"
#: editor/editor_settings.cpp
msgid "Docks"
-msgstr ""
+msgstr "Docas"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Scene Tree"
-msgstr "Edição da Ãrvore de Cena"
+msgstr "Ãrvore de Cena"
#: editor/editor_settings.cpp
msgid "Start Create Dialog Fully Expanded"
-msgstr ""
+msgstr "Iniciar Dialogo de Criação Expandido por Completo"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Always Show Folders"
-msgstr "Sempre Mostrar Grade"
+msgstr "Sempre Exibir Pastas"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Property Editor"
-msgstr "Editor de Grupos"
+msgstr "Editor de Propriedades"
#: editor/editor_settings.cpp
msgid "Auto Refresh Interval"
-msgstr ""
+msgstr "Intervalo de Atualização Automática"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Subresource Hue Tint"
-msgstr "Sub-Recursos"
+msgstr "Tom de Coloração para Sub-Recursos"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Color Theme"
-msgstr "Tema do Editor"
+msgstr "Tema de Cores"
#: editor/editor_settings.cpp scene/3d/label_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Line Spacing"
-msgstr ""
+msgstr "Espaçamento de Linha"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
#: modules/gdscript/editor/gdscript_highlighter.cpp
-#, fuzzy
msgid "Highlighting"
-msgstr "Iluminação direta"
+msgstr "Destacando"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
-#, fuzzy
msgid "Syntax Highlighting"
-msgstr "Realce de sintaxe"
+msgstr "Destaque de Sintaxe"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Highlight All Occurrences"
-msgstr ""
+msgstr "Destaque de Todas as Ocorrências"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Highlight Current Line"
-msgstr ""
+msgstr "Destaque da Linha Atual"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
msgid "Highlight Type Safe Lines"
-msgstr ""
+msgstr "Destaque de Linhas de Tipo Seguro"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Indent"
-msgstr "Recuar Esquerda"
+msgstr "Indentar"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Auto Recuar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Convert Indent On Save"
-msgstr "Converter recuo para espaços"
+msgstr "Converter Indentação Ao Salvar"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Draw Tabs"
@@ -5614,144 +5580,139 @@ msgstr "Navegação"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Smooth Scrolling"
-msgstr ""
+msgstr "Rolagem Suave"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "V Scroll Speed"
-msgstr ""
+msgstr "Velocidade de Rolagem Vertical"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Show Minimap"
-msgstr "Mostrar Origem"
+msgstr "Exibir Mini-Mapa"
#: editor/editor_settings.cpp
msgid "Minimap Width"
-msgstr ""
+msgstr "Largura do Mini-Mapa"
#: editor/editor_settings.cpp
msgid "Mouse Extra Buttons Navigate History"
-msgstr ""
+msgstr "Botões Extra do Mouse Navegam o Histórico"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Drag And Drop Selection"
-msgstr "Seleção Do GridMap"
+msgstr "Seleção Arrasta e Solta"
#: editor/editor_settings.cpp
-msgid "Appearance"
+msgid "Stay In Script Editor On Node Selected"
msgstr ""
+#: editor/editor_settings.cpp
+msgid "Appearance"
+msgstr "Aparência"
+
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Show Line Numbers"
msgstr "Mostrar Números de Linha"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Line Numbers Zero Padded"
-msgstr "Número da Linha:"
+msgstr "Número das Linha Tem Espaçamento Com Zeros"
#: editor/editor_settings.cpp
msgid "Show Bookmark Gutter"
-msgstr ""
+msgstr "Exibir Espaçamento de Bookmark"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Show Breakpoint Gutter"
-msgstr "Pular Breakpoints"
+msgstr "Exibir Espaçamento de Pontos de Quebra"
#: editor/editor_settings.cpp
msgid "Show Info Gutter"
-msgstr ""
+msgstr "Exibir Espaçamento de Informações"
#: editor/editor_settings.cpp
msgid "Code Folding"
-msgstr ""
+msgstr "Dobramento de Código (Folding)"
#: editor/editor_settings.cpp
msgid "Word Wrap"
-msgstr ""
+msgstr "Quebra de Linhas"
#: editor/editor_settings.cpp
msgid "Show Line Length Guidelines"
-msgstr ""
+msgstr "Exibir Guia de Tamanho de Linhas"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Soft Column"
-msgstr ""
+msgstr "Tamanho de Linha Guia em Coluna Suave"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Hard Column"
-msgstr ""
+msgstr "Tamanho de Linha Guia em Coluna Rígida"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Script List"
-msgstr "Editor de Script"
+msgstr "Lista de Scripts"
#: editor/editor_settings.cpp
msgid "Show Members Overview"
-msgstr ""
+msgstr "Exibir Visão Geral de Membros"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Files"
-msgstr "Arquivo"
+msgstr "Arquivos"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Trim Trailing Whitespace On Save"
-msgstr "Apagar Espaços em Branco"
+msgstr "Aparar Espaços em Branco de Fim de Linha ao Salvar"
#: editor/editor_settings.cpp
msgid "Autosave Interval Secs"
-msgstr ""
+msgstr "Intervalo de Salvamento Automático em Segundos"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
msgid "Restore Scripts On Load"
-msgstr ""
+msgstr "Restaurar Scripts ao Carregar"
#: editor/editor_settings.cpp
msgid "Auto Reload And Parse Scripts On Save"
-msgstr ""
+msgstr "Ao Salvar Recarregar e Reinterpretar Scripts Automaticamente"
#: editor/editor_settings.cpp
msgid "Auto Reload Scripts On External Change"
-msgstr ""
+msgstr "Recarregar Scripts Automaticamente em Alterações Externas"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Create Signal Callbacks"
-msgstr "Forçar Fallbacks do Shader"
+msgstr "Criar Sinal de Callback"
#: editor/editor_settings.cpp
msgid "Sort Members Outline Alphabetically"
-msgstr ""
+msgstr "Ordenar Prévia de Membros Automaticamente"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Cursor"
-msgstr ""
+msgstr "Cursor"
#: editor/editor_settings.cpp
msgid "Scroll Past End Of File"
-msgstr ""
+msgstr "Rolar Além do Fim do Arquivo"
#: editor/editor_settings.cpp
msgid "Block Caret"
-msgstr ""
+msgstr "Bloco Cursor"
#: editor/editor_settings.cpp
msgid "Caret Blink"
-msgstr ""
+msgstr "Piscar Cursor"
#: editor/editor_settings.cpp
msgid "Caret Blink Speed"
-msgstr ""
+msgstr "Velocidade de Piscar do Cursor"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Right Click Moves Caret"
-msgstr "Clique com o botão direito para adicionar o ponto"
+msgstr "Botão Direito Move o Cursor"
#: editor/editor_settings.cpp modules/gdscript/gdscript.cpp
#: modules/gdscript/gdscript_editor.cpp
@@ -5761,54 +5722,51 @@ msgstr "Conclusão"
#: editor/editor_settings.cpp
msgid "Idle Parse Delay"
-msgstr ""
+msgstr "Atraso Ocioso Para Interpretação"
#: editor/editor_settings.cpp
msgid "Auto Brace Complete"
-msgstr ""
+msgstr "Fechar Chaves Automaticamente"
#: editor/editor_settings.cpp
msgid "Code Complete Delay"
-msgstr ""
+msgstr "Atraso de Sugestão de Código"
#: editor/editor_settings.cpp
msgid "Put Callhint Tooltip Below Current Line"
-msgstr ""
+msgstr "Pôr Dica de Sugestão de Chamada na Linha Abaixo da Atual"
#: editor/editor_settings.cpp
msgid "Callhint Tooltip Offset"
-msgstr ""
+msgstr "Espaçamento de Dica de Sugestão de Chamada"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Complete File Paths"
-msgstr "Copiar Caminho do Nó"
+msgstr "Concluir Caminhos de Arquivo"
#: editor/editor_settings.cpp modules/gdscript/gdscript_editor.cpp
-#, fuzzy
msgid "Add Type Hints"
-msgstr "Adicionar Modelo"
+msgstr "Adicionar Dicas de Tipo"
#: editor/editor_settings.cpp
msgid "Use Single Quotes"
msgstr "Usar Aspas Simples"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Show Help Index"
-msgstr "Mostrar auxiliadores"
+msgstr "Exibir Ãndice de Ajuda"
#: editor/editor_settings.cpp
msgid "Help Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte de Ajuda"
#: editor/editor_settings.cpp
msgid "Help Source Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte de Ajuda Principal"
#: editor/editor_settings.cpp
msgid "Help Title Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte de Ajuda para Títulos"
#: editor/editor_settings.cpp modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -5819,45 +5777,39 @@ msgid "Pick Distance"
msgstr "Escolha a Distância"
#: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Preview Size"
-msgstr "Visualização"
+msgstr "Tamanho da Prévia"
#: editor/editor_settings.cpp
msgid "Primary Grid Color"
-msgstr ""
+msgstr "Cor Primária da Grade"
#: editor/editor_settings.cpp
msgid "Secondary Grid Color"
-msgstr ""
+msgstr "Cor Secundária da Grade"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Selection Box Color"
-msgstr "Selecionar Apenas"
+msgstr "Cor da Caixa de Seleção"
#: editor/editor_settings.cpp editor/plugins/path_editor_plugin.cpp
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "3D Gizmos"
-msgstr "Gizmos"
+msgstr "Gizmos 3D"
#: editor/editor_settings.cpp editor/plugins/path_editor_plugin.cpp
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "Gizmo Colors"
-msgstr "Cores de Emissão"
+msgstr "Cores do Gismo"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Instanced"
-msgstr "Instância"
+msgstr "Instanciado"
#: editor/editor_settings.cpp modules/gltf/gltf_node.cpp
#: scene/3d/physics_body.cpp
-#, fuzzy
msgid "Joint"
-msgstr "Ponto"
+msgstr "Junção"
#: editor/editor_settings.cpp scene/2d/collision_shape_2d.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/touch_screen_button.cpp
@@ -5866,12 +5818,11 @@ msgstr "Ponto"
#: scene/resources/particles_material.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
msgid "Shape"
-msgstr ""
+msgstr "Form"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Primary Grid Steps"
-msgstr "Passo de grade:"
+msgstr "Passadas para Grade Primária"
#: editor/editor_settings.cpp
msgid "Grid Size"
@@ -5879,183 +5830,155 @@ msgstr "Tamanho da Grade"
#: editor/editor_settings.cpp
msgid "Grid Division Level Max"
-msgstr ""
+msgstr "Nível Máximo de Divisão de Grade"
#: editor/editor_settings.cpp
msgid "Grid Division Level Min"
-msgstr ""
+msgstr "Nível Mínimo de Divisão da Grade"
#: editor/editor_settings.cpp
msgid "Grid Division Level Bias"
-msgstr ""
+msgstr "Tendência do Nível de Divisão da Grade"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Grid XZ Plane"
-msgstr "Pintura GridMap"
+msgstr "Grade do Plano XZ"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Grid XY Plane"
-msgstr "Pintura GridMap"
+msgstr "Grade do Plano XY"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Grid YZ Plane"
-msgstr "Pintura GridMap"
+msgstr "Grade do Plano YZ"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Default FOV"
-msgstr "Padrão"
+msgstr "Campo de Visão (FOV) Padrão"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Default Z Near"
-msgstr "Tema Padrão"
+msgstr "Z Padrão Próximo"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Default Z Far"
-msgstr "Padrão"
+msgstr "Z Padrão Longe"
#: editor/editor_settings.cpp
msgid "Lightmap Baking Number Of CPU Threads"
-msgstr ""
+msgstr "Número de Threads de CPU para o Bake do Mapa de Luz"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Navigation Scheme"
-msgstr "Modo Navegação"
+msgstr "Esquema de Navegação"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Invert Y Axis"
-msgstr "Eduitar Eixo Y"
+msgstr "Inverter Eixo Y"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Invert X Axis"
-msgstr "Editar Eixo X"
+msgstr "Inverter Eixo X"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Zoom Style"
-msgstr "Reduzir"
+msgstr "Estilo de Zoom"
#: editor/editor_settings.cpp
msgid "Emulate Numpad"
-msgstr ""
+msgstr "Simular o Numpad"
#: editor/editor_settings.cpp
msgid "Emulate 3 Button Mouse"
-msgstr ""
+msgstr "Simular o Botão 3 Do Mouse"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Orbit Modifier"
-msgstr "Ordenar por Primeiro Modificado"
+msgstr "Modificador de Órbita"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Pan Modifier"
-msgstr "Modo Panorâmico"
+msgstr "Modificador de Panorâmica"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Zoom Modifier"
-msgstr "Modificado"
+msgstr "Modificador de Zoom"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Warped Mouse Panning"
-msgstr ""
+msgstr "Panorização Distorcida pelo Mouse"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Navigation Feel"
-msgstr "Modo Navegação"
+msgstr "Sensação de Navegação"
#: editor/editor_settings.cpp
msgid "Orbit Sensitivity"
-msgstr ""
+msgstr "Sensitividade de Órbita"
#: editor/editor_settings.cpp
msgid "Orbit Inertia"
-msgstr ""
+msgstr "Inercia de Órbita"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Translation Inertia"
-msgstr "Traduções"
+msgstr "Inércia de Translação"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Zoom Inertia"
-msgstr "Ampliar"
+msgstr "Inércia de Zoom"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook"
-msgstr "Visão Livre em Cima"
+msgstr "Visão Livre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Navigation Scheme"
-msgstr "Criar Malha de Navegação"
+msgstr "Esquema de Navegação de Visão Livre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Sensitivity"
-msgstr "Visão Livre na Esquerda"
+msgstr "Sensibilidade de Visão Livre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Inertia"
-msgstr "Visão Livre na Esquerda"
+msgstr "Inercia de Visão Livre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Base Speed"
-msgstr "Modificador de velocidade da Visão Livre"
+msgstr "Velocidade Base de Visão Livre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Activation Modifier"
-msgstr "Modificador de velocidade lenta da Visão Livre"
+msgstr "Modificador de Ativação de Visão Livre"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Freelook Speed Zoom Link"
-msgstr "Modificador de velocidade da Visão Livre"
+msgstr "Velocidade de Ligação do Visão Livre"
#: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Grid Color"
-msgstr "Escolher Cor"
+msgstr "Cor da Grade"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Guides Color"
-msgstr "Escolher Cor"
+msgstr "Cor Guia"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Smart Snapping Line Color"
-msgstr "Encaixe inteligente"
+msgstr "Cor da Linha de Encaixe Inteligente"
#: editor/editor_settings.cpp
msgid "Bone Width"
-msgstr ""
+msgstr "Largura do Osso"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone Color 1"
-msgstr "Renomear Item de Cor"
+msgstr "Cor de Osso 1"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone Color 2"
-msgstr "Renomear Item de Cor"
+msgstr "Cor de Osso 2"
#: editor/editor_settings.cpp
msgid "Bone Selected Color"
@@ -6063,11 +5986,11 @@ msgstr "Cor Selecionada do Osso"
#: editor/editor_settings.cpp
msgid "Bone IK Color"
-msgstr ""
+msgstr "Cor de Osso IK (cinemática inversa)"
#: editor/editor_settings.cpp
msgid "Bone Outline Color"
-msgstr ""
+msgstr "Cor de Contorno do Osso"
#: editor/editor_settings.cpp
msgid "Bone Outline Size"
@@ -6075,103 +5998,93 @@ msgstr "Tamanho do Contorno do Osso"
#: editor/editor_settings.cpp
msgid "Viewport Border Color"
-msgstr ""
+msgstr "Cor da Borda de Viewport"
#: editor/editor_settings.cpp
msgid "Constrain Editor View"
-msgstr ""
+msgstr "Restringir Visão do Editor"
#: editor/editor_settings.cpp
msgid "Simple Panning"
-msgstr ""
+msgstr "Panoramização Simples"
#: editor/editor_settings.cpp
msgid "Scroll To Pan"
-msgstr ""
+msgstr "Rolar para Panoramizar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Pan Speed"
-msgstr "Velocidade:"
+msgstr "Velocidade da Panoramização"
#: editor/editor_settings.cpp editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Poly Editor"
-msgstr "Editor UV de Polígonos 2D"
+msgstr "Editor de Polígonos"
#: editor/editor_settings.cpp
msgid "Point Grab Radius"
-msgstr ""
+msgstr "Raio de Agarro ao Ponto"
#: editor/editor_settings.cpp editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Show Previous Outline"
-msgstr "Plano Anterior"
+msgstr "Exibir Prévia Anterior"
#: editor/editor_settings.cpp editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Autorename Animation Tracks"
-msgstr "Renomear Animação"
+msgstr "Renomear Automaticamente Faixa de Animação"
#: editor/editor_settings.cpp
msgid "Default Create Bezier Tracks"
-msgstr ""
+msgstr "Criar Faixa de Bezier por Padrão"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Default Create Reset Tracks"
-msgstr "Criar RESET Track(s)"
+msgstr "Criar Faixa RESET Por Padrão"
#: editor/editor_settings.cpp
msgid "Onion Layers Past Color"
-msgstr ""
+msgstr "Cor da Camada de Cebola Anterior"
#: editor/editor_settings.cpp
msgid "Onion Layers Future Color"
-msgstr ""
+msgstr "Cor da Camada de Cebola Posterior"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Visual Editors"
-msgstr "Editor de Grupos"
+msgstr "Editores Visuais"
#: editor/editor_settings.cpp
msgid "Minimap Opacity"
-msgstr ""
+msgstr "Opacidade do Mini-Mapa"
#: editor/editor_settings.cpp
msgid "Window Placement"
-msgstr ""
+msgstr "Colocação da Janela"
#: editor/editor_settings.cpp scene/2d/back_buffer_copy.cpp scene/2d/sprite.cpp
#: scene/2d/visibility_notifier_2d.cpp scene/3d/sprite_3d.cpp
#: scene/gui/control.cpp
-#, fuzzy
msgid "Rect"
-msgstr "Rect Completo"
+msgstr "Retângulo"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Rect Custom Position"
-msgstr "Definir Posição de Saída da Curva"
+msgstr "Posição Personalizada Do Retângulo"
#: editor/editor_settings.cpp platform/android/export/export_plugin.cpp
msgid "Screen"
-msgstr ""
+msgstr "Tela"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Auto Save"
-msgstr "Auto Fatiar"
+msgstr "Salvar Automaticamente"
#: editor/editor_settings.cpp
msgid "Save Before Running"
msgstr "Salvar Antes de Executar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Font Size"
-msgstr "Visão Frontal"
+msgstr "Tamanho da Fonte"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
@@ -6180,28 +6093,26 @@ msgstr "Hospedeiro Remoto"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Remote Port"
-msgstr "Remover Ponto"
+msgstr "Porta Remota"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Editor SSL Certificates"
-msgstr "Configurações do Editor"
+msgstr "Certificados SSL do Editor"
#: editor/editor_settings.cpp
msgid "HTTP Proxy"
-msgstr ""
+msgstr "Proxy HTTP"
#: editor/editor_settings.cpp
msgid "Host"
-msgstr ""
+msgstr "Hospedeiro"
#: editor/editor_settings.cpp editor/fileserver/editor_file_server.cpp
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Port"
-msgstr ""
+msgstr "Porta"
#. TRANSLATORS: Project Manager here refers to the tool used to create/manage Godot projects.
#: editor/editor_settings.cpp
@@ -6215,32 +6126,31 @@ msgstr "Ordem de Classificação"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Symbol Color"
-msgstr ""
+msgstr "Cor do Simbolo"
#: editor/editor_settings.cpp
msgid "Keyword Color"
-msgstr ""
+msgstr "Cor de Palavra Chave"
#: editor/editor_settings.cpp
msgid "Control Flow Keyword Color"
-msgstr ""
+msgstr "Core de Palavra Chave de Controle de Fluxo"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Base Type Color"
-msgstr "Mudar Tipo Base"
+msgstr "Cor de Tipo Base"
#: editor/editor_settings.cpp
msgid "Engine Type Color"
-msgstr ""
+msgstr "Cor de Tipo da Engine"
#: editor/editor_settings.cpp
msgid "User Type Color"
-msgstr ""
+msgstr "Cor de Tipo Do Usuário"
#: editor/editor_settings.cpp
msgid "Comment Color"
-msgstr ""
+msgstr "Cor de Comentário"
#: editor/editor_settings.cpp
msgid "String Color"
@@ -6257,26 +6167,24 @@ msgid "Completion Background Color"
msgstr "Cor de Fundo de Acabamento"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Completion Selected Color"
-msgstr "Importar Selecionado"
+msgstr "Cor de Sugestão Selecionada"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Existing Color"
-msgstr ""
+msgstr "Cor de Sugestão Existente"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Scroll Color"
-msgstr ""
+msgstr "Cor da Barra de Rolagem de Sugestão"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Font Color"
-msgstr ""
+msgstr "Cor da Fonte de Sugestão"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Text Color"
-msgstr "Próximo Chão"
+msgstr "Cor do Texto"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Line Number Color"
@@ -6288,86 +6196,75 @@ msgstr "Cor do Número da Linha Segura"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Caret Color"
-msgstr ""
+msgstr "Cor do Cursor"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Caret Background Color"
msgstr "Cor de Fundo de Acentuação"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Text Selected Color"
-msgstr "Excluir Selecionados"
+msgstr "Cor do Texto Selecionado"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Selection Color"
-msgstr "Selecionar Apenas"
+msgstr "Cor da Seleção"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Brace Mismatch Color"
-msgstr ""
+msgstr "Cor de Chave Incompatível"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Current Line Color"
-msgstr "Cena Atual"
+msgstr "Cor da Linha Atual"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Color"
-msgstr ""
+msgstr "Cor do Tamanho de Linha Guia"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Word Highlighted Color"
-msgstr "Realce de sintaxe"
+msgstr "Cor da Palavra em Destaque"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Number Color"
-msgstr ""
+msgstr "Cor de Número"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Function Color"
-msgstr "Funções"
+msgstr "Cor de Função"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Member Variable Color"
-msgstr "Renomear Variável"
+msgstr "Cor de Variável Membro"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Mark Color"
-msgstr "Escolher Cor"
+msgstr "Cor de Marcação"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Bookmark Color"
-msgstr "Marcadores"
+msgstr "Cor de Bookmark"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Breakpoint Color"
-msgstr "Breakpoints"
+msgstr "Cor de Ponto de Quebra"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Executing Line Color"
-msgstr ""
+msgstr "Cor da Linha em Execução"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Code Folding Color"
-msgstr ""
+msgstr "Cor da Dobradiça de Código"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Search Result Color"
-msgstr "Pesquisar resultados"
+msgstr "Cor do Resultado de Pesquisa"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Search Result Border Color"
-msgstr "Pesquisar resultados"
+msgstr "Cor da Borda do Resultado de Pesquisa"
#: editor/editor_spin_slider.cpp
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
@@ -6376,14 +6273,12 @@ msgstr ""
"mais precisas."
#: editor/editor_spin_slider.cpp scene/gui/button.cpp
-#, fuzzy
msgid "Flat"
-msgstr "Plano 0"
+msgstr "Raso"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hide Slider"
-msgstr "Modo Colisão"
+msgstr "Esconder Rolagem"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -6683,7 +6578,7 @@ msgstr ""
#: editor/fileserver/editor_file_server.cpp
msgid "File Server"
-msgstr ""
+msgstr "Servidor de Arquivos"
#: editor/fileserver/editor_file_server.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -6751,6 +6646,11 @@ msgid ""
"After renaming to an unknown extension, the file won't be shown in the "
"editor anymore."
msgstr ""
+"Esta extensão de arquivo não é reconhecida pelo editor.\n"
+"Se ainda assim você deseja renomear, utilize o explorador de arquivos do seu "
+"sistema operacional.\n"
+"Após renomear para uma extensão desconhecida, este arquivo não será mais "
+"exibida pelo editor."
#: editor/filesystem_dock.cpp
msgid ""
@@ -7051,43 +6951,40 @@ msgstr "Gerenciar Grupos"
#: editor/import/editor_import_collada.cpp
msgid "Collada"
-msgstr ""
+msgstr "Collada"
#: editor/import/editor_import_collada.cpp
msgid "Use Ambient"
-msgstr ""
+msgstr "Utilizar Ambient"
#: editor/import/resource_importer_bitmask.cpp
-#, fuzzy
msgid "Create From"
-msgstr "Criar Pasta"
+msgstr "Criar à Partir de"
#: editor/import/resource_importer_bitmask.cpp
#: servers/audio/effects/audio_effect_compressor.cpp
msgid "Threshold"
-msgstr ""
+msgstr "Limite"
#: editor/import/resource_importer_csv_translation.cpp
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_scene.cpp
#: editor/import/resource_importer_texture.cpp
#: editor/import/resource_importer_wav.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Compress"
-msgstr "Componentes"
+msgstr "Comprimir"
#: editor/import/resource_importer_csv_translation.cpp
msgid "Delimiter"
-msgstr ""
+msgstr "Delimitador"
#: editor/import/resource_importer_layered_texture.cpp
-#, fuzzy
msgid "ColorCorrect"
-msgstr "Correção de Cor"
+msgstr "Corrigir as Cores"
#: editor/import/resource_importer_layered_texture.cpp
msgid "No BPTC If RGB"
-msgstr ""
+msgstr "Não utilizar BPTC se for RGB"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/cpu_particles_2d.cpp
@@ -7095,13 +6992,13 @@ msgstr ""
#: scene/resources/material.cpp scene/resources/particles_material.cpp
#: scene/resources/texture.cpp scene/resources/visual_shader.cpp
msgid "Flags"
-msgstr ""
+msgstr "Sinalizadores"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/animation/tween.cpp
#: scene/resources/texture.cpp
msgid "Repeat"
-msgstr ""
+msgstr "Repetir"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
@@ -7111,24 +7008,22 @@ msgstr "Filtro"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Mipmaps"
-msgstr "Sinais"
+msgstr "Mipmaps"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "Anisotropic"
-msgstr ""
+msgstr "Anisotrópico"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "sRGB"
-msgstr ""
+msgstr "sRGB"
#: editor/import/resource_importer_layered_texture.cpp
-#, fuzzy
msgid "Slices"
-msgstr "Auto Fatiar"
+msgstr "Fatias"
#: editor/import/resource_importer_layered_texture.cpp
#: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp
@@ -7145,14 +7040,12 @@ msgid "Vertical"
msgstr "Vertical"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Generate Tangents"
-msgstr "Gerar Pontos"
+msgstr "Gerar Tangentes"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Scale Mesh"
-msgstr "Modo de Escalonamento"
+msgstr "Redimensionar Malha"
#: editor/import/resource_importer_obj.cpp
msgid "Offset Mesh"
@@ -7160,14 +7053,12 @@ msgstr "Malha de Deslocamento"
#: editor/import/resource_importer_obj.cpp
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Octahedral Compression"
-msgstr "Expressão"
+msgstr "Compressão Octaedral"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Optimize Mesh Flags"
-msgstr "Sinalizadores de Tamanho"
+msgstr "Otimizar Sinalizadores da Malha"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -7215,24 +7106,20 @@ msgid "Nodes"
msgstr "Nós"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Type"
-msgstr "Retornar"
+msgstr "Tipo da Raiz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Name"
-msgstr "Nome Remoto"
+msgstr "Nome da Raiz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Scale"
-msgstr "Escala"
+msgstr "Escala da Raiz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Custom Script"
-msgstr "Recortar Nós"
+msgstr "Script Personalizado"
#: editor/import/resource_importer_scene.cpp scene/resources/texture.cpp
msgid "Storage"
@@ -7240,69 +7127,59 @@ msgstr "Armazenamento"
#: editor/import/resource_importer_scene.cpp
msgid "Use Legacy Names"
-msgstr ""
+msgstr "Utilizar Nomes Legados"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
msgid "Materials"
msgstr "Materiais"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Keep On Reimport"
-msgstr "Reimportar"
+msgstr "Manter ao Reimportar"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Meshes"
-msgstr "Malha"
+msgstr "Malhas"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Ensure Tangents"
-msgstr "Modificar Tangente da Curva"
+msgstr "Garantir Tangentes"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Light Baking"
-msgstr "Faça mapas de luz"
+msgstr "Bake de Mapa de Luz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Lightmap Texel Size"
-msgstr "Faça mapas de luz"
+msgstr "Tamanho do Texel no Mapa de Luz"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
msgid "Skins"
-msgstr ""
+msgstr "Peles"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Use Named Skins"
-msgstr "Usar Encaixe Escalar"
+msgstr "Utilizar Peles com Nome"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "External Files"
-msgstr "Abrir um Arquivo"
+msgstr "Arquivos Externos"
#: editor/import/resource_importer_scene.cpp
msgid "Store In Subdir"
-msgstr ""
+msgstr "Salvar em Sub Diretório"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Filter Script"
-msgstr "Filtrar scripts"
+msgstr "Filtrar Script"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Keep Custom Tracks"
-msgstr "Transformação"
+msgstr "Manter Faixas Personalizadas"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Optimizer"
-msgstr "Otimizar"
+msgstr "Otimizador"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/item_list_editor_plugin.cpp main/main.cpp
@@ -7316,9 +7193,8 @@ msgstr "Otimizar"
#: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp
#: scene/gui/rich_text_label.cpp scene/resources/curve.cpp
#: scene/resources/environment.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Enabled"
-msgstr "Habilitar"
+msgstr "Habilitado"
#: editor/import/resource_importer_scene.cpp
msgid "Max Linear Error"
@@ -7329,19 +7205,16 @@ msgid "Max Angular Error"
msgstr "Erro Angular Máximo"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Max Angle"
-msgstr "Valor"
+msgstr "Ângulo Máximo"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Remove Unused Tracks"
-msgstr "Remover Trilha da Anim"
+msgstr "Remover Faixas não Utilizadas"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Clips"
-msgstr "Clipes de Animação"
+msgstr "Clipes"
#: editor/import/resource_importer_scene.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/particles_2d.cpp scene/3d/area.cpp scene/3d/cpu_particles.cpp
@@ -7395,30 +7268,33 @@ msgid ""
"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
"texture compression to reduce memory usage (blue channel is discarded)."
msgstr ""
+"%s: Foi detectado que a textura está sendo utilizada como mapa normal em 3D. "
+"Habilitando a compressão vermelho/verde para reduzir o uso de memória (o "
+"canal azul é descartado)."
#: editor/import/resource_importer_texture.cpp
msgid ""
"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
"generation and VRAM texture compression."
msgstr ""
+"%s: Foi detectado que a textura está sendo utilizada em 3D. Habilitando a "
+"filtro, repetir, geração de mipmap e compressão de textura VRAM."
#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
-msgstr ""
+msgstr "2D, Detecte 3D"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "2D Pixel"
-msgstr "Pixels Sólidos"
+msgstr "Pixel 2D"
#: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp
msgid "Lossy Quality"
-msgstr ""
+msgstr "Com Perda de Qualidade"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "HDR Mode"
-msgstr "Modo de Seleção"
+msgstr "Modo HDR"
#: editor/import/resource_importer_texture.cpp
msgid "BPTC LDR"
@@ -7429,54 +7305,52 @@ msgstr ""
#: scene/2d/mesh_instance_2d.cpp scene/2d/multimesh_instance_2d.cpp
#: scene/2d/particles_2d.cpp scene/2d/sprite.cpp scene/resources/style_box.cpp
msgid "Normal Map"
-msgstr ""
+msgstr "Mapa Normal"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Process"
-msgstr "Pós-processamento"
+msgstr "Processar"
#: editor/import/resource_importer_texture.cpp
msgid "Fix Alpha Border"
-msgstr ""
+msgstr "Corrigir Alpha da Borda"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Premult Alpha"
-msgstr "Editar Polígono"
+msgstr ""
#: editor/import/resource_importer_texture.cpp
msgid "Hdr As Srgb"
-msgstr ""
+msgstr "HDR como SRGB"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Invert Color"
-msgstr "Vértice"
+msgstr "Inverter Cor"
#: editor/import/resource_importer_texture.cpp
msgid "Normal Map Invert Y"
msgstr "Inverter Y do Mapa Normal"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Size Limit"
-msgstr "Limites"
+msgstr "Limite de Tamanho"
#: editor/import/resource_importer_texture.cpp
msgid "Detect 3D"
-msgstr ""
+msgstr "Detectar 3D"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "SVG"
-msgstr "HSV"
+msgstr "SVG"
#: editor/import/resource_importer_texture.cpp
msgid ""
"Warning, no suitable PC VRAM compression enabled in Project Settings. This "
"texture will not display correctly on PC."
msgstr ""
+"Atenção, nenhuma forma adequada de Compressão VRAM para PC foi habilitada "
+"nas Configurações do Projeto. Esta textura não será exibida corretamente em "
+"PCs."
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Atlas File"
@@ -7487,64 +7361,56 @@ msgid "Import Mode"
msgstr "Modo de Importação"
#: editor/import/resource_importer_texture_atlas.cpp
-#, fuzzy
msgid "Crop To Region"
-msgstr "Definir a região do Mosaico"
+msgstr "Recortar para Região"
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Trim Alpha Border From Region"
-msgstr ""
+msgstr "Aparar Borda Alfa da Região"
#: editor/import/resource_importer_wav.cpp scene/2d/physics_body_2d.cpp
-#, fuzzy
msgid "Force"
-msgstr "Forçar Push"
+msgstr "Forçar"
#: editor/import/resource_importer_wav.cpp
msgid "8 Bit"
-msgstr ""
+msgstr "8 Bits"
#: editor/import/resource_importer_wav.cpp main/main.cpp
#: modules/mono/editor/csharp_project.cpp modules/mono/mono_gd/gd_mono.cpp
msgid "Mono"
-msgstr ""
+msgstr "Mono"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Max Rate"
-msgstr "Nó Mix"
+msgstr "Frequência Máxima"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Max Rate Hz"
-msgstr "Nó Mix"
+msgstr "Frequência Máxima Hz"
#: editor/import/resource_importer_wav.cpp
msgid "Trim"
-msgstr ""
+msgstr "Aparar"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Normalize"
-msgstr "Formato"
+msgstr "Normalizar"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop Mode"
-msgstr "Modo de Movimentação"
+msgstr "Modo de Loop"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop Begin"
-msgstr "Modo de Movimentação"
+msgstr "Inicio do Loop"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop End"
-msgstr "Modo de Movimentação"
+msgstr "Fim do Loop"
#: editor/import_defaults_editor.cpp
msgid "Select Importer"
@@ -7632,18 +7498,16 @@ msgid "Raw"
msgstr "Bruto"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Capitalized"
-msgstr "Capitalizar"
+msgstr "Capitalizado"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Localized"
-msgstr "Localizar"
+msgstr "Localizado"
#: editor/inspector_dock.cpp
msgid "Localization not available for current language."
-msgstr ""
+msgstr "Localização não disponível para linguagem atual."
#: editor/inspector_dock.cpp
msgid "Copy Properties"
@@ -8192,9 +8056,8 @@ msgid "New"
msgstr "Novo"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Paste As Reference"
-msgstr "%s Referência de Classes"
+msgstr "Colar como Referência"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Transitions..."
@@ -8523,7 +8386,7 @@ msgstr "Filtros..."
#: editor/plugins/asset_library_editor_plugin.cpp scene/main/http_request.cpp
msgid "Use Threads"
-msgstr ""
+msgstr "Usar Threads"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
@@ -8686,25 +8549,21 @@ msgid "Loading..."
msgstr "Carregando..."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "First"
msgstr "Primeiro"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "Previous"
msgstr "Anterior"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "Next"
msgstr "Próximo"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgctxt "Pagination"
msgid "Last"
msgstr "Último"
@@ -8755,7 +8614,7 @@ msgstr "Testando"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed to get repository configuration."
-msgstr ""
+msgstr "Falhou em obter o repositório de configuração."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
@@ -8815,7 +8674,7 @@ msgstr "Faça mapas de luz"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "LightMap Bake"
-msgstr ""
+msgstr "Bake de Mapa de Luz"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Select lightmap bake file:"
@@ -9322,23 +9181,20 @@ msgid "View"
msgstr "Visualizar"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show"
-msgstr "Mostrar Grade"
+msgstr "Exibir"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show When Snapping"
-msgstr "Encaixe inteligente"
+msgstr "Exibir ao Encaixar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Hide"
-msgstr ""
+msgstr "Esconder"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Grid"
-msgstr "Alternar Modo"
+msgstr "Alternar Grade"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
@@ -9622,11 +9478,11 @@ msgstr "Plano 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
-msgstr "Ease In"
+msgstr "Esmaecer de Entrada"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease Out"
-msgstr "Ease Out"
+msgstr "Esmaecer de Saída"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
@@ -9690,16 +9546,15 @@ msgstr "Gradiente Editado"
#: editor/plugins/gradient_texture_2d_editor_plugin.cpp
msgid "Swap GradientTexture2D Fill Points"
-msgstr ""
+msgstr "Trocar Pontos de Preenchimento do GradientTexture2D"
#: editor/plugins/gradient_texture_2d_editor_plugin.cpp
msgid "Swap Gradient Fill Points"
-msgstr ""
+msgstr "Trocar Pontos de Preenchimento do Degradê"
#: editor/plugins/gradient_texture_2d_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Grid Snap"
-msgstr "Alternar Modo"
+msgstr "Alternar Encaixe da Grade"
#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
#: scene/3d/label_3d.cpp scene/gui/button.cpp scene/gui/dialogs.cpp
@@ -9718,13 +9573,12 @@ msgstr "Ãcone"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "ID"
-msgstr ""
+msgstr "ID"
#: editor/plugins/item_list_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Separator"
-msgstr "Separação:"
+msgstr "Separador"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
@@ -9958,7 +9812,6 @@ msgstr ""
"%s"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "MeshLibrary"
msgstr "Biblioteca de Malhas"
@@ -9983,14 +9836,12 @@ msgid "Update from Scene"
msgstr "Atualizar a partir de Cena"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Apply without Transforms"
-msgstr "Aplicar transformações da MeshInstance"
+msgstr "Aplicar sem Transformações"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Apply with Transforms"
-msgstr "Aplicar transformações da MeshInstance"
+msgstr "Aplicar com Transformações"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and no MultiMesh set in node)."
@@ -10482,7 +10333,7 @@ msgstr "Configurações da grade"
#: editor/plugins/polygon_2d_editor_plugin.cpp modules/csg/csg_shape.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Snap"
-msgstr "Snap"
+msgstr "Encaixe"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Enable Snap"
@@ -10518,7 +10369,7 @@ msgstr "Sincronizar Ossos ao Polígono"
#: editor/plugins/ray_cast_2d_editor_plugin.cpp
msgid "Set cast_to"
-msgstr ""
+msgstr "Definir cast_to"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
@@ -10849,48 +10700,43 @@ msgstr "Resultados de Pesquisa"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Dominant Script On Scene Change"
-msgstr ""
+msgstr "Abrir Script Dominante ao Mudar de Cena"
#: editor/plugins/script_editor_plugin.cpp
msgid "External"
-msgstr ""
+msgstr "Externo"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Use External Editor"
-msgstr "Depurar com o Editor Externo"
+msgstr "Utilizar Editor Externo"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Exec Path"
-msgstr "Caminho de Exportação"
+msgstr "Caminho de Execução"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Script Temperature Enabled"
-msgstr "Selecionar o Arquivo de Modelo"
+msgstr "Temperatura de Script Habilitado"
#: editor/plugins/script_editor_plugin.cpp
msgid "Highlight Current Script"
-msgstr ""
+msgstr "Destacar Script Atual"
#: editor/plugins/script_editor_plugin.cpp
msgid "Script Temperature History Size"
-msgstr ""
+msgstr "Tamanho de Histórico de Temperatura de Script"
#: editor/plugins/script_editor_plugin.cpp
msgid "Current Script Background Color"
msgstr "Cor de Fundo do Script Atual"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Group Help Pages"
-msgstr "Agrupar Selecionados"
+msgstr "Agrupar Páginas de Ajuda"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Sort Scripts By"
-msgstr "Criar Script"
+msgstr "Ordenar Scripts Por"
#: editor/plugins/script_editor_plugin.cpp
msgid "List Script Names As"
@@ -10898,7 +10744,7 @@ msgstr "Listar Nomes de Script Como"
#: editor/plugins/script_editor_plugin.cpp
msgid "Exec Flags"
-msgstr ""
+msgstr "Sinalizadores de Execução"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Scripts"
@@ -10982,7 +10828,7 @@ msgstr "Marcadores"
#: editor/plugins/script_text_editor.cpp
msgid "Breakpoints"
-msgstr "Breakpoints"
+msgstr "Pontos de Quebra"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
@@ -11411,13 +11257,14 @@ msgstr "Pré-visualização Cinemática"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "(Not in GLES2)"
-msgstr ""
+msgstr "(Não disponível em GLES2)"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Debug draw modes are only available when using the GLES3 renderer, not GLES2."
-msgstr "Não disponível ao usar o renderizador GLES2."
+msgstr ""
+"Modos de Debug draw só estão disponíveis para uso com o renderizador GLES3. "
+"GLES2 não suporta esta funcionalidade."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
@@ -11712,16 +11559,15 @@ msgstr "Pós"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Manipulator Gizmo Size"
-msgstr ""
+msgstr "Tamanho do Gizmo Manipulador"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Manipulator Gizmo Opacity"
-msgstr ""
+msgstr "Opacidade do Gizmo Manipulador"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Show Viewport Rotation Gizmo"
-msgstr "Bloquear Rotação da Visão"
+msgstr "Exibir Gizmo de Rotação do Viewport"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unnamed Gizmo"
@@ -11773,9 +11619,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometria inválida, não é possível substituir por malha."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Convert to MeshInstance2D"
-msgstr "Converter para Malha2D"
+msgstr "Converter para MeshInstance2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -11878,6 +11723,11 @@ msgid "New Animation"
msgstr "Nova animação"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrar métodos"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Velocidade:"
@@ -12175,9 +12025,8 @@ msgstr ""
"Fechar mesmo assim?"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Type"
-msgstr "Remover Telha"
+msgstr "Remover Tipo"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -12221,14 +12070,12 @@ msgstr ""
"Adicione mais itens manualmente ou importe de outro tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Type"
-msgstr "Adicionar Tipo de Item"
+msgstr "Adicionar Tipo de Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Theme Type"
-msgstr "Remover remoto"
+msgstr "Remover Tipo de Tema"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -12343,9 +12190,8 @@ msgid "Select Another Theme Resource:"
msgstr "Selecionar Outro Recurso de Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme Resource"
-msgstr "Renomear Recurso"
+msgstr "Recurso de Tema"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Another Theme"
@@ -12400,14 +12246,12 @@ msgid "Add Item Type"
msgstr "Adicionar Tipo de Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Set Variation Base Type"
-msgstr "Definir o Tipo da Variável"
+msgstr "Definir Tipo de Variação Base"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Set Base Type"
-msgstr "Mudar Tipo Base"
+msgstr "Definir Tipo Base"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show Default"
@@ -12429,12 +12273,15 @@ msgstr "Substituir todos os itens do modelo padrão."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select the variation base type from a list of available types."
msgstr ""
+"Selecione a variação do tipo base à partir da lista de tipos disponíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"A type associated with a built-in class cannot be marked as a variation of "
"another type."
msgstr ""
+"Um tipo associado à uma classe padrão não pode ser marcada como variação de "
+"outro tipo."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme:"
@@ -12672,14 +12519,13 @@ msgid "Clear Transform"
msgstr "Limpar Transformação"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Tile Map"
-msgstr "Pintar TileMap"
+msgstr "Tile Map"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Palette Min Width"
-msgstr ""
+msgstr "Largura Mínima de Paleta"
#: editor/plugins/tile_map_editor_plugin.cpp
#, fuzzy
@@ -12687,24 +12533,20 @@ msgid "Palette Item H Separation"
msgstr "Separador Nomeado"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Show Tile Names"
-msgstr "Mostrar todos os Locales"
+msgstr "Mostrar Nomes dos Tiles"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Show Tile Ids"
-msgstr "Mostrar Réguas"
+msgstr "Mostrar Ids dos Tiles"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Sort Tiles By Name"
-msgstr "Ordenar arquivos"
+msgstr "Ordenar Tiles por Nome"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Bucket Fill Preview"
-msgstr "Preenchimento de Balde"
+msgstr "Pré-visualização do Preenchimento de Balde"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -12713,9 +12555,8 @@ msgid "Editor Side"
msgstr "Editor"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Display Grid"
-msgstr "Exibição Overdraw"
+msgstr "Mostrar Grid"
#: editor/plugins/tile_map_editor_plugin.cpp
#, fuzzy
@@ -13081,14 +12922,12 @@ msgstr "Passo"
#: editor/plugins/tile_set_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Separation"
-msgstr "Separação:"
+msgstr "Separação"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Tile"
-msgstr "Selecionar"
+msgstr "Selecionar Tile"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/light_2d.cpp scene/2d/line_2d.cpp scene/2d/mesh_instance_2d.cpp
@@ -13097,9 +12936,8 @@ msgstr "Selecionar"
#: scene/gui/nine_patch_rect.cpp scene/gui/texture_rect.cpp
#: scene/resources/material.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Texture"
-msgstr "Texto"
+msgstr "Textura"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -13119,9 +12957,8 @@ msgid "Modulate"
msgstr "Popular"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tile Mode"
-msgstr "Alternar Modo"
+msgstr "Modo de Tiles"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -13129,14 +12966,12 @@ msgid "Autotile Bitmask Mode"
msgstr "Modo Bitmask"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Subtile Size"
-msgstr "Tamanho do Contorno:"
+msgstr "Tamanho do Sub Título"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Subtile Spacing"
-msgstr "Loop da Animação"
+msgstr "Espaçamento dos Subtiles"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -13144,24 +12979,20 @@ msgid "Occluder Offset"
msgstr "Criar Polígono de Oclusão"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation Offset"
-msgstr "Modo Navegação"
+msgstr "Deslocamento da Navegação"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Shape Offset"
-msgstr "Deslocamento Base"
+msgstr "Deslocamento da Forma"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Shape Transform"
-msgstr "Transformação"
+msgstr "Transformação da Forma"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Collision"
-msgstr "Colisão"
+msgstr "Colisão Selecionada"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -13174,19 +13005,16 @@ msgid "Selected Collision One Way Margin"
msgstr "Modo Colisão"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Navigation"
-msgstr "Navegação Visível"
+msgstr "Navegação Selecionada"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Occlusion"
-msgstr "Selecionar"
+msgstr "Oclusão Selecionada"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tileset Script"
-msgstr "Filtrar scripts"
+msgstr "Scripts do Tileset"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "TileSet"
@@ -13265,7 +13093,7 @@ msgstr "Selecione o caminho da chave privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr "SSH Passphrase"
+msgstr "Senha SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
@@ -14274,11 +14102,13 @@ msgstr "Executável"
#: editor/project_export.cpp
msgid "Export the project for all the presets defined."
-msgstr ""
+msgstr "Exportar o projeto para todos os presets definidos."
#: editor/project_export.cpp
msgid "All presets must have an export path defined for Export All to work."
msgstr ""
+"Todos os presets devem ter um caminho de exportação para que a "
+"funcionalidade de Exportar Todos funcione."
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
@@ -14391,11 +14221,12 @@ msgid ""
"Note: Encryption key needs to be stored in the binary,\n"
"you need to build the export templates from source."
msgstr ""
+"Nota: Chaves de encriptação têm que ser salvas com o binário,\n"
+"você precisa compilar os modelos de exportação à partir do código fonte."
#: editor/project_export.cpp
-#, fuzzy
msgid "More Info..."
-msgstr "Mover Para..."
+msgstr "Mais Informações..."
#: editor/project_export.cpp
msgid "Export PCK/Zip..."
@@ -14422,18 +14253,16 @@ msgid "ZIP File"
msgstr "Arquivo ZIP"
#: editor/project_export.cpp
-#, fuzzy
msgid "Godot Project Pack"
-msgstr "Pacote de Jogos Godot"
+msgstr "Pacote do Projeto Godot"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
msgstr "Modelos de exportação para esta plataforma não foram encontrados:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Project Export"
-msgstr "Fundadores do Projeto"
+msgstr "Exportar Projeto"
#: editor/project_export.cpp
msgid "Manage Export Templates"
@@ -14746,7 +14575,6 @@ msgstr ""
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
#: editor/project_manager.cpp
-#, fuzzy
msgctxt "Application"
msgid "Project Manager"
msgstr "Gerenciador de Projetos"
@@ -15546,7 +15374,7 @@ msgstr "Tornar Local"
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
msgid "Another node already uses this unique name in the scene."
-msgstr ""
+msgstr "Outro nó já está usando este nome único na cena atual."
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -15632,7 +15460,7 @@ msgstr "Sub-Recursos"
#: editor/scene_tree_dock.cpp
msgid "Access as Scene Unique Name"
-msgstr ""
+msgstr "Acessar como Nome Único de Cena"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
@@ -15737,7 +15565,7 @@ msgstr "Seleção Central"
#: editor/scene_tree_dock.cpp
msgid "Derive Script Globals By Name"
-msgstr ""
+msgstr "Obter Globais de Script por Nome"
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -15770,6 +15598,9 @@ msgid ""
"with the '%s' prefix in a node path.\n"
"Click to disable this."
msgstr ""
+"Este nó pode ser acessado em qualquer lugar na cena adicionando o prefixo "
+"'%s' em um node path.\n"
+"Clique para desabilitar esta funcionalidade."
#: editor/scene_tree_editor.cpp
msgid ""
@@ -16062,15 +15893,15 @@ msgstr "Filtros do tile"
#: editor/script_editor_debugger.cpp
msgid "Auto Switch To Remote Scene Tree"
-msgstr ""
+msgstr "Mudar Automaticamente Para a Ãrvore de Cena Remota"
#: editor/script_editor_debugger.cpp
msgid "Remote Scene Tree Refresh Interval"
-msgstr ""
+msgstr "Intervalo de Atualização da Ãrvore Remota"
#: editor/script_editor_debugger.cpp
msgid "Remote Inspect Refresh Interval"
-msgstr ""
+msgstr "Intervalo de Atualização da Inspeção Remota"
#: editor/script_editor_debugger.cpp
msgid "Network Profiler"
@@ -16168,7 +15999,7 @@ msgstr "Alterar Raio da Luz"
#: editor/spatial_editor_gizmos.cpp
msgid "Stream Player 3D"
-msgstr ""
+msgstr "Player de Stream 3D"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
@@ -16178,7 +16009,7 @@ msgstr "Alterar o Ângulo de Emissão do AudioStreamPlayer3D"
#: platform/osx/export/export.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Camera"
-msgstr ""
+msgstr "Câmera"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
@@ -16190,7 +16021,7 @@ msgstr "Alterar Tamanho da Câmera"
#: editor/spatial_editor_gizmos.cpp
msgid "Visibility Notifier"
-msgstr ""
+msgstr "Notificador de Visibilidade"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Notifier AABB"
@@ -16248,9 +16079,8 @@ msgid "Change Ray Shape Length"
msgstr "Alterar o Comprimento da Forma do Raio"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Edge"
-msgstr "Modo Navegação"
+msgstr "Bordas de Navegação"
#: editor/spatial_editor_gizmos.cpp
#, fuzzy
@@ -16258,30 +16088,28 @@ msgid "Navigation Edge Disabled"
msgstr "Modo Navegação"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Solid"
-msgstr "Modo Navegação"
+msgstr "Navegação Sólida"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Solid Disabled"
-msgstr "Modo Navegação"
+msgstr "Navegação Sólida Desabilitada"
#: editor/spatial_editor_gizmos.cpp
msgid "Joint Body A"
-msgstr ""
+msgstr "Corpo de Encaixe A"
#: editor/spatial_editor_gizmos.cpp
msgid "Joint Body B"
-msgstr ""
+msgstr "Corpo de Encaixe B"
#: editor/spatial_editor_gizmos.cpp
msgid "Room Edge"
-msgstr ""
+msgstr "Canto da Sala"
#: editor/spatial_editor_gizmos.cpp
msgid "Room Overlap"
-msgstr ""
+msgstr "Intercessão de Quarto"
#: editor/spatial_editor_gizmos.cpp
msgid "Set Room Point Position"
@@ -16294,11 +16122,11 @@ msgstr "Definir Margem"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Edge"
-msgstr ""
+msgstr "Canto do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Arrow"
-msgstr ""
+msgstr "Seta do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Set Portal Point Position"
@@ -16306,7 +16134,7 @@ msgstr "Definir Posição Do Ponto Do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Front"
-msgstr ""
+msgstr "Frente do Portal"
#: editor/spatial_editor_gizmos.cpp
#, fuzzy
@@ -16354,12 +16182,12 @@ msgstr "Criar Polígono de Oclusão"
#: main/main.cpp
msgid "Godot Physics"
-msgstr ""
+msgstr "Godot Physics"
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
msgid "Use BVH"
-msgstr ""
+msgstr "Usar BVH"
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
@@ -16382,37 +16210,36 @@ msgid "RID Pool Prealloc"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "Debugger stdout"
-msgstr "Depurador"
+msgstr "Depurador stdout"
#: main/main.cpp
msgid "Max Chars Per Second"
-msgstr ""
+msgstr "Máximo de Caracteres por Segundo"
#: main/main.cpp
msgid "Max Messages Per Frame"
-msgstr ""
+msgstr "Máximo de Mensagens por Quadro"
#: main/main.cpp
msgid "Max Errors Per Second"
-msgstr ""
+msgstr "Máximo de Erros por Segundo"
#: main/main.cpp
msgid "Max Warnings Per Second"
-msgstr ""
+msgstr "Máximo de Alertas Por Segundo"
#: main/main.cpp
msgid "Flush stdout On Print"
-msgstr ""
+msgstr "Limpar stdout ao Fazer Print"
#: main/main.cpp servers/visual_server.cpp
msgid "Logging"
-msgstr ""
+msgstr "Registrando Log"
#: main/main.cpp
msgid "File Logging"
-msgstr ""
+msgstr "Registrando Log de Arquivos"
#: main/main.cpp
#, fuzzy
@@ -16426,11 +16253,11 @@ msgstr "Copiar Caminho"
#: main/main.cpp
msgid "Max Log Files"
-msgstr ""
+msgstr "Máximo Log de Arquivos"
#: main/main.cpp
msgid "Driver"
-msgstr ""
+msgstr "Driver"
#: main/main.cpp
msgid "Driver Name"
@@ -16438,41 +16265,39 @@ msgstr "Nome do Driver"
#: main/main.cpp
msgid "Fallback To GLES2"
-msgstr ""
+msgstr "Utilizar GLES2 Como Fallback"
#: main/main.cpp
msgid "Use Nvidia Rect Flicker Workaround"
-msgstr ""
+msgstr "Utilizar a Gambiarra \"Nvidia Rect Flicker\""
#: main/main.cpp
msgid "DPI"
-msgstr ""
+msgstr "DPI"
#: main/main.cpp
msgid "Allow hiDPI"
-msgstr ""
+msgstr "Permitir hiDPI"
#: main/main.cpp
-#, fuzzy
msgid "V-Sync"
-msgstr "Sincronizar"
+msgstr "Sincronização Vertical (V-Sync)"
#: main/main.cpp
-#, fuzzy
msgid "Use V-Sync"
-msgstr "Use Encaixar"
+msgstr "Usar Sincronização Vertical (V-Sync)"
#: main/main.cpp
msgid "Per Pixel Transparency"
-msgstr ""
+msgstr "Transparência por Pixel"
#: main/main.cpp
msgid "Allowed"
-msgstr ""
+msgstr "Permitido"
#: main/main.cpp
msgid "Intended Usage"
-msgstr ""
+msgstr "Intenção de Uso"
#: main/main.cpp
#, fuzzy
@@ -16480,13 +16305,12 @@ msgid "Framebuffer Allocation"
msgstr "Seleção de Frame"
#: main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Energy Saving"
-msgstr "Erro ao salvar"
+msgstr "Economia de Energia"
#: main/main.cpp
msgid "Threads"
-msgstr ""
+msgstr "Threads"
#: main/main.cpp servers/physics_2d/physics_2d_server_wrap_mt.h
#, fuzzy
@@ -16499,19 +16323,17 @@ msgstr ""
#: main/main.cpp
msgid "Handheld"
-msgstr ""
+msgstr "Portátil (Handheld)"
#: main/main.cpp platform/javascript/export/export.cpp
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Orientation"
-msgstr "Documentação Online"
+msgstr "Orientação"
#: main/main.cpp scene/gui/scroll_container.cpp scene/gui/text_edit.cpp
#: scene/main/scene_tree.cpp scene/register_scene_types.cpp
-#, fuzzy
msgid "Common"
-msgstr "Comunidade"
+msgstr "Comum"
#: main/main.cpp
#, fuzzy
@@ -16519,27 +16341,26 @@ msgid "Physics FPS"
msgstr "Frame de Física %"
#: main/main.cpp
-#, fuzzy
msgid "Force FPS"
-msgstr "Forçar Push"
+msgstr "Forçar FPS"
#: main/main.cpp
msgid "Enable Pause Aware Picking"
-msgstr ""
+msgstr "Habilitar Escolha que é Ciente à Pausas"
#: main/main.cpp scene/gui/item_list.cpp scene/gui/popup_menu.cpp
#: scene/gui/scroll_container.cpp scene/gui/text_edit.cpp scene/gui/tree.cpp
#: scene/main/viewport.cpp scene/register_scene_types.cpp
msgid "GUI"
-msgstr ""
+msgstr "GUI (Interface Gráfica de Usuário)"
#: main/main.cpp
msgid "Drop Mouse On GUI Input Disabled"
-msgstr ""
+msgstr "Desabilitar Mouse quando GUI Input estiver Desabilitad"
#: main/main.cpp
msgid "stdout"
-msgstr ""
+msgstr "stdout"
#: main/main.cpp
msgid "Print FPS"
@@ -16547,7 +16368,7 @@ msgstr ""
#: main/main.cpp
msgid "Verbose stdout"
-msgstr ""
+msgstr "stdout Verboso"
#: main/main.cpp scene/main/scene_tree.cpp scene/resources/multimesh.cpp
#, fuzzy
@@ -16555,9 +16376,8 @@ msgid "Physics Interpolation"
msgstr "Modo de Interpolação"
#: main/main.cpp
-#, fuzzy
msgid "Enable Warnings"
-msgstr "Habilitar Filtragem"
+msgstr "Habilitar Avisos"
#: main/main.cpp
#, fuzzy
@@ -16566,19 +16386,19 @@ msgstr "Seleção de Frame"
#: main/main.cpp
msgid "Low Processor Mode"
-msgstr ""
+msgstr "Modo Processamento Baixo"
#: main/main.cpp
msgid "Delta Sync After Draw"
-msgstr ""
+msgstr "Sincronizar Delta Após o Draw"
#: main/main.cpp
msgid "iOS"
-msgstr ""
+msgstr "iOS"
#: main/main.cpp
msgid "Hide Home Indicator"
-msgstr ""
+msgstr "Esconder Indicador de Home"
#: main/main.cpp
#, fuzzy
@@ -16592,16 +16412,15 @@ msgstr "Ponto"
#: main/main.cpp
msgid "Touch Delay"
-msgstr ""
+msgstr "Atraso de Touch"
#: main/main.cpp servers/visual_server.cpp
msgid "GLES3"
-msgstr ""
+msgstr "GLES3"
#: main/main.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Shaders"
-msgstr "Shader"
+msgstr "Shaders"
#: main/main.cpp
#, fuzzy
@@ -16611,30 +16430,28 @@ msgstr "Forçar Fallbacks do Shader"
#: main/main.cpp scene/3d/baked_lightmap.cpp scene/3d/camera.cpp
#: scene/3d/world_environment.cpp scene/main/scene_tree.cpp
#: scene/resources/world.cpp
-#, fuzzy
msgid "Environment"
-msgstr "Visualizar Ambiente"
+msgstr "Ambiente"
#: main/main.cpp
msgid "Default Clear Color"
-msgstr ""
+msgstr "Cor de Limpeza Padrão"
#: main/main.cpp
msgid "Boot Splash"
-msgstr ""
+msgstr "Imagem de Exibição ao Iniciar"
#: main/main.cpp
-#, fuzzy
msgid "Show Image"
-msgstr "Mostrar Ossos"
+msgstr "Mostrar Imagem"
#: main/main.cpp
msgid "Image"
-msgstr ""
+msgstr "Imagem"
#: main/main.cpp
msgid "Fullsize"
-msgstr ""
+msgstr "Tamanho Inteiro"
#: main/main.cpp scene/resources/dynamic_font.cpp
msgid "Use Filter"
@@ -16646,13 +16463,12 @@ msgid "BG Color"
msgstr "Cores"
#: main/main.cpp
-#, fuzzy
msgid "macOS Native Icon"
-msgstr "Definir ícone de telha"
+msgstr "Ãcone Nativo macOS"
#: main/main.cpp
msgid "Windows Native Icon"
-msgstr ""
+msgstr "Ãcone Windows Nativo"
#: main/main.cpp
msgid "Buffering"
@@ -16660,29 +16476,27 @@ msgstr ""
#: main/main.cpp
msgid "Agile Event Flushing"
-msgstr ""
+msgstr "Limpeza de Eventos Agil"
#: main/main.cpp
msgid "Emulate Touch From Mouse"
-msgstr ""
+msgstr "Simular Toque à Partir do Mouse"
#: main/main.cpp
msgid "Emulate Mouse From Touch"
-msgstr ""
+msgstr "Simular Mouse à Partir do Touch"
#: main/main.cpp
-#, fuzzy
msgid "Mouse Cursor"
-msgstr "Botão do Mouse"
+msgstr "Cursor do Mouse"
#: main/main.cpp
-#, fuzzy
msgid "Custom Image"
-msgstr "Recortar Nós"
+msgstr "Imagem Personalizada"
#: main/main.cpp
msgid "Custom Image Hotspot"
-msgstr ""
+msgstr "Imagem Personalizada de Hotspot"
#: main/main.cpp
msgid "Tooltip Position Offset"
@@ -16694,9 +16508,8 @@ msgid "Debugger Agent"
msgstr "Depurador"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
-#, fuzzy
msgid "Wait For Debugger"
-msgstr "Depurador"
+msgstr "Esperar pelo Depurador"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
msgid "Wait Timeout"
@@ -16704,11 +16517,11 @@ msgstr "Tempo Limite de Espera"
#: main/main.cpp
msgid "Runtime"
-msgstr ""
+msgstr "Tempo de Execução"
#: main/main.cpp
msgid "Unhandled Exception Policy"
-msgstr ""
+msgstr "Politica de Tratamento Exceções"
#: main/main.cpp
#, fuzzy
@@ -16717,22 +16530,20 @@ msgstr "Localizar Tipo de Nó"
#: main/main.cpp scene/gui/texture_progress.cpp
#: scene/gui/viewport_container.cpp
-#, fuzzy
msgid "Stretch"
-msgstr "Buscar"
+msgstr "Esticar"
#: main/main.cpp
-#, fuzzy
msgid "Aspect"
-msgstr "Inspetor"
+msgstr "Aspecto"
#: main/main.cpp
msgid "Shrink"
-msgstr ""
+msgstr "Encolher"
#: main/main.cpp scene/main/scene_tree.cpp
msgid "Auto Accept Quit"
-msgstr ""
+msgstr "Aceitar Sair Automaticamente"
#: main/main.cpp scene/main/scene_tree.cpp
#, fuzzy
@@ -16746,15 +16557,15 @@ msgstr "Encaixar nos Lados do Nó"
#: main/main.cpp
msgid "Dynamic Fonts"
-msgstr ""
+msgstr "Fontes Dinâmicas"
#: main/main.cpp
msgid "Use Oversampling"
-msgstr ""
+msgstr "Utilizar Oversampling"
#: modules/bullet/register_types.cpp modules/bullet/space_bullet.cpp
msgid "Active Soft World"
-msgstr ""
+msgstr "Ativar Mundo Macio"
#: modules/csg/csg_gizmos.cpp
msgid "CSG"
@@ -16777,35 +16588,30 @@ msgid "Change Torus Outer Radius"
msgstr "Alterar Raio Externo do Toro"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Operation"
-msgstr "Opções"
+msgstr "Operação"
#: modules/csg/csg_shape.cpp
msgid "Calculate Tangents"
-msgstr ""
+msgstr "Calcular Tangentes"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Use Collision"
-msgstr "Colisão"
+msgstr "Usar Colisão"
#: modules/csg/csg_shape.cpp servers/physics_2d_server.cpp
-#, fuzzy
msgid "Collision Layer"
-msgstr "Modo Colisão"
+msgstr "Camada de Colisão"
#: modules/csg/csg_shape.cpp scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp
#: scene/3d/ray_cast.cpp scene/3d/spring_arm.cpp
#: scene/resources/navigation_mesh.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collision Mask"
-msgstr "Modo Colisão"
+msgstr "Máscara de Colisão"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Invert Faces"
-msgstr "Converter Maíusculas/Minúsculas"
+msgstr "Inverter Faces"
#: modules/csg/csg_shape.cpp scene/2d/navigation_agent_2d.cpp
#: scene/2d/navigation_obstacle_2d.cpp scene/3d/navigation_agent.cpp
@@ -16823,14 +16629,12 @@ msgid "Radial Segments"
msgstr "Segmentos Radiais"
#: modules/csg/csg_shape.cpp scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Rings"
-msgstr "Avisos"
+msgstr "Anéis"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Smooth Faces"
-msgstr "Passo suave"
+msgstr "Suavizar Faces"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16839,7 +16643,7 @@ msgstr "Mostrar Guias"
#: modules/csg/csg_shape.cpp
msgid "Cone"
-msgstr ""
+msgstr "Cone"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16853,27 +16657,25 @@ msgstr "Alterar Raio Externo do Toro"
#: modules/csg/csg_shape.cpp
msgid "Ring Sides"
-msgstr ""
+msgstr "Lados de Anel"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
#: scene/3d/collision_polygon.cpp
-#, fuzzy
msgid "Polygon"
-msgstr "Polígonos"
+msgstr "Polígono"
#: modules/csg/csg_shape.cpp
msgid "Spin Degrees"
-msgstr ""
+msgstr "Graus de Rotação"
#: modules/csg/csg_shape.cpp
msgid "Spin Sides"
-msgstr ""
+msgstr "Lados de Rotação"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Path Node"
-msgstr "Colar Nós"
+msgstr "Caminho do Nó"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16882,11 +16684,11 @@ msgstr "Criar Vertex Interno"
#: modules/csg/csg_shape.cpp
msgid "Path Interval"
-msgstr ""
+msgstr "Intervalo de Caminho"
#: modules/csg/csg_shape.cpp
msgid "Path Simplify Angle"
-msgstr ""
+msgstr "Ângulo de Simplificação de Caminho"
#: modules/csg/csg_shape.cpp
msgid "Path Rotation"
@@ -16911,58 +16713,52 @@ msgid "Path Joined"
msgstr "Caminho Unido"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Compression Mode"
-msgstr "Modo Colisão"
+msgstr "Modo de Compressão"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Transfer Channel"
-msgstr "Alteração de Transformação"
+msgstr "Transferir Canal"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Channel Count"
-msgstr "Instância"
+msgstr "Quantidade de Canais"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Always Ordered"
-msgstr "Sempre Mostrar Grade"
+msgstr "Sempre Ordenado"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "Server Relay"
-msgstr ""
+msgstr "Retransmissor de Servidor"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Verify"
-msgstr ""
+msgstr "Virificar DTLS"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Hostname"
-msgstr ""
+msgstr "Nome de Host DTLS"
#: modules/enet/networked_multiplayer_enet.cpp
-#, fuzzy
msgid "Use DTLS"
-msgstr "Use Encaixar"
+msgstr "Usar DTLS"
#: modules/fbx/editor_scene_importer_fbx.cpp
msgid "FBX"
-msgstr ""
+msgstr "FBX"
#: modules/fbx/editor_scene_importer_fbx.cpp
msgid "Use FBX"
-msgstr ""
+msgstr "Utilizar FBX"
#: modules/gdnative/gdnative.cpp
msgid "Config File"
msgstr "Arquivo de Configuração"
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Load Once"
-msgstr "Carregar Recurso"
+msgstr "Carregar Apenas uma Vez"
#: modules/gdnative/gdnative.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -16975,9 +16771,8 @@ msgid "Symbol Prefix"
msgstr "Prefixo do Símbolo"
#: modules/gdnative/gdnative.cpp
-#, fuzzy
msgid "Reloadable"
-msgstr "Recarregar"
+msgstr "Recarregável"
#: modules/gdnative/gdnative.cpp
#: modules/gdnative/gdnative_library_singleton_editor.cpp
@@ -17042,9 +16837,8 @@ msgid "Script Class"
msgstr "Classe do Script"
#: modules/gdnative/nativescript/nativescript.cpp
-#, fuzzy
msgid "Icon Path"
-msgstr "Habilitar"
+msgstr "Caminho para Ãcone"
#: modules/gdnative/register_types.cpp
msgid "GDNative"
@@ -17057,7 +16851,7 @@ msgstr "GDScript"
#: modules/gdscript/editor/gdscript_highlighter.cpp
msgid "Function Definition Color"
-msgstr ""
+msgstr "Cor de Definição de Função"
#: modules/gdscript/editor/gdscript_highlighter.cpp
#, fuzzy
@@ -17066,19 +16860,19 @@ msgstr "Copiar Caminho do Nó"
#: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp
msgid "Max Call Stack"
-msgstr ""
+msgstr "Tamanho Máximo da Pilha de Chamadas de Função"
#: modules/gdscript/gdscript.cpp
msgid "Treat Warnings As Errors"
-msgstr ""
+msgstr "Trate Alertas como Erros"
#: modules/gdscript/gdscript.cpp
msgid "Exclude Addons"
-msgstr ""
+msgstr "Excluir Addons"
#: modules/gdscript/gdscript.cpp
msgid "Autocomplete Setters And Getters"
-msgstr ""
+msgstr "Auto Completar Setters e Getters"
#: modules/gdscript/gdscript_functions.cpp
msgid "Step argument is zero!"
@@ -17129,11 +16923,11 @@ msgstr "Não foi possível resolver"
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Show Native Symbols In Editor"
-msgstr ""
+msgstr "Exibir Simbolos Nativos no Editor"
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Use Thread"
-msgstr ""
+msgstr "Utilize Thread"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
msgid "Export Mesh GLTF2"
@@ -17153,9 +16947,8 @@ msgid "Byte Offset"
msgstr "Deslocamento do Byte"
#: modules/gltf/gltf_accessor.cpp
-#, fuzzy
msgid "Component Type"
-msgstr "Componentes"
+msgstr "Tipo do Componente"
#: modules/gltf/gltf_accessor.cpp
#, fuzzy
@@ -17167,14 +16960,12 @@ msgid "Count"
msgstr "Quantidade"
#: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Min"
-msgstr "MiB"
+msgstr "Min"
#: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Max"
-msgstr "Misturar"
+msgstr "Max"
#: modules/gltf/gltf_accessor.cpp
#, fuzzy
@@ -17216,9 +17007,8 @@ msgid "Byte Stride"
msgstr ""
#: modules/gltf/gltf_buffer_view.cpp
-#, fuzzy
msgid "Indices"
-msgstr "Todos os dispositivos"
+msgstr "Ãndices"
#: modules/gltf/gltf_camera.cpp
msgid "FOV Size"
@@ -17241,19 +17031,17 @@ msgstr "Linear"
#: scene/resources/environment.cpp scene/resources/material.cpp
#: scene/resources/particles_material.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp
-#, fuzzy
msgid "Color"
-msgstr "Cores"
+msgstr "Cor"
#: modules/gltf/gltf_light.cpp scene/3d/reflection_probe.cpp
#: scene/resources/environment.cpp
msgid "Intensity"
-msgstr ""
+msgstr "Intensidade"
#: modules/gltf/gltf_light.cpp scene/2d/light_2d.cpp scene/3d/light.cpp
-#, fuzzy
msgid "Range"
-msgstr "Alterar"
+msgstr "Intervalo"
#: modules/gltf/gltf_light.cpp
msgid "Inner Cone Angle"
@@ -17284,35 +17072,31 @@ msgstr "Plataforma"
#: modules/gltf/gltf_node.cpp scene/3d/mesh_instance.cpp
msgid "Skin"
-msgstr ""
+msgstr "Skin"
#: modules/gltf/gltf_node.cpp scene/3d/spatial.cpp
-#, fuzzy
msgid "Translation"
-msgstr "Traduções"
+msgstr "Tradução"
#: modules/gltf/gltf_node.cpp
-#, fuzzy
msgid "Children"
-msgstr "Filhos Editáveis"
+msgstr "Filhos"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Joints"
-msgstr "Ponto"
+msgstr "Pontos"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
msgid "Roots"
-msgstr ""
+msgstr "Raízes"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_state.cpp
msgid "Unique Names"
-msgstr ""
+msgstr "Nomes Únicos"
#: modules/gltf/gltf_skeleton.cpp
-#, fuzzy
msgid "Godot Bone Node"
-msgstr "Nó TimeSeek"
+msgstr "Nó de Osso Godot"
#: modules/gltf/gltf_skin.cpp
#, fuzzy
@@ -17320,9 +17104,8 @@ msgid "Skin Root"
msgstr "Nova Raiz de Cena"
#: modules/gltf/gltf_skin.cpp
-#, fuzzy
msgid "Joints Original"
-msgstr "Origem do Foco"
+msgstr "Pontos Originais"
#: modules/gltf/gltf_skin.cpp
msgid "Inverse Binds"
@@ -17367,12 +17150,11 @@ msgstr ""
#: modules/gltf/gltf_state.cpp
msgid "Json"
-msgstr ""
+msgstr "Json"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Major Version"
-msgstr "Versão"
+msgstr "Versão Importante"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17402,28 +17184,25 @@ msgid "Scene Name"
msgstr "Nome da Cena"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Root Nodes"
-msgstr "Nome do nó raiz"
+msgstr "Nós Raízes"
#: modules/gltf/gltf_state.cpp scene/2d/particles_2d.cpp
#: scene/gui/texture_button.cpp scene/gui/texture_progress.cpp
-#, fuzzy
msgid "Textures"
-msgstr "Funcionalidades"
+msgstr "Texturas"
#: modules/gltf/gltf_state.cpp platform/uwp/export/export.cpp
msgid "Images"
-msgstr ""
+msgstr "Imagens"
#: modules/gltf/gltf_state.cpp
msgid "Cameras"
-msgstr ""
+msgstr "Câmeras"
#: modules/gltf/gltf_state.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Lights"
-msgstr "Luz"
+msgstr "Luzes"
#: modules/gltf/gltf_state.cpp
msgid "Unique Animation Names"
@@ -17434,9 +17213,8 @@ msgid "Skeletons"
msgstr "Esqueletos"
#: modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Skeleton To Node"
-msgstr "Selecione um Nó"
+msgstr "Esqueleto Para Nó"
#: modules/gltf/gltf_state.cpp
msgid "Animations"
@@ -17463,7 +17241,7 @@ msgstr "Faça mapas de luz"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
msgid "Cell"
-msgstr ""
+msgstr "Célula"
#: modules/gridmap/grid_map.cpp
#, fuzzy
@@ -17471,25 +17249,22 @@ msgid "Octant Size"
msgstr "Visão Frontal"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center X"
-msgstr "Centro"
+msgstr "Centro X"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center Y"
-msgstr "Centro"
+msgstr "Centro Y"
#: modules/gridmap/grid_map.cpp
-#, fuzzy
msgid "Center Z"
-msgstr "Centro"
+msgstr "Centro Z"
#: modules/gridmap/grid_map.cpp scene/2d/collision_object_2d.cpp
#: scene/2d/tile_map.cpp scene/3d/collision_object.cpp scene/3d/soft_body.cpp
#: scene/resources/material.cpp
msgid "Mask"
-msgstr ""
+msgstr "Máscara"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
#, fuzzy
@@ -17500,9 +17275,8 @@ msgstr "Navegação"
#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
#: scene/3d/navigation_mesh_instance.cpp
-#, fuzzy
msgid "Navigation Layers"
-msgstr "Modo Navegação"
+msgstr "Camadas da Navegação"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -17804,7 +17578,7 @@ msgstr "Pronto!"
#: modules/opensimplex/noise_texture.cpp
msgid "Seamless"
-msgstr ""
+msgstr "Sem Emenda"
#: modules/opensimplex/noise_texture.cpp
msgid "As Normal Map"
@@ -17824,7 +17598,7 @@ msgstr "Deslocamento do Ruído"
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Octaves"
-msgstr ""
+msgstr "Oitavas"
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Period"
@@ -17841,7 +17615,7 @@ msgstr ""
#: modules/regex/regex.cpp
msgid "Subject"
-msgstr ""
+msgstr "Sujeito"
#: modules/regex/regex.cpp
#, fuzzy
@@ -18293,7 +18067,7 @@ msgstr "Iterador"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "para (elem) em (input):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable:"
@@ -18327,7 +18101,7 @@ msgstr "Switch"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "'input' é:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Type Cast"
@@ -18579,7 +18353,7 @@ msgstr "Chamadas"
#: modules/visual_script/visual_script_nodes.cpp scene/gui/graph_node.cpp
msgid "Title"
-msgstr ""
+msgstr "Título"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -18658,7 +18432,7 @@ msgstr "Modo Prioridade"
#: modules/webrtc/webrtc_data_channel.h
msgid "WebRTC"
-msgstr ""
+msgstr "WebRTC"
#: modules/webrtc/webrtc_data_channel.h
#, fuzzy
@@ -18892,7 +18666,7 @@ msgstr "Inspecionar a Instância Anterior"
#: platform/android/export/export_plugin.cpp
msgid "Code"
-msgstr ""
+msgstr "Código"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
#, fuzzy
@@ -18985,7 +18759,7 @@ msgstr "Interface de Usuário"
#: platform/android/export/export_plugin.cpp
msgid "Allow"
-msgstr ""
+msgstr "Permitir"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
#, fuzzy
@@ -19003,7 +18777,7 @@ msgstr "Expressão"
#: platform/android/export/export_plugin.cpp
msgid "Salt"
-msgstr ""
+msgstr "Sal"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19298,10 +19072,8 @@ msgstr ""
"do projeto"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files to gradle project."
-msgstr ""
-"Não foi possível exportar os arquivos do projeto ao projeto do gradle\n"
+msgstr "Não foi possível exportar os arquivos do projeto ao projeto do gradle"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19385,19 +19157,19 @@ msgstr ""
#: platform/iphone/export/export.cpp
msgid "iPhone 2436 X 1125"
-msgstr ""
+msgstr "IPhone 2436 X 1125"
#: platform/iphone/export/export.cpp
msgid "iPhone 2208 X 1242"
-msgstr ""
+msgstr "iPhone 2208 X 1242"
#: platform/iphone/export/export.cpp
msgid "iPad 1024 X 768"
-msgstr ""
+msgstr "iPad 1024 X 768"
#: platform/iphone/export/export.cpp
msgid "iPad 2048 X 1536"
-msgstr ""
+msgstr "iPad 2048 X 1536"
#: platform/iphone/export/export.cpp
msgid "Portrait Launch Screens"
@@ -19405,31 +19177,31 @@ msgstr ""
#: platform/iphone/export/export.cpp
msgid "iPhone 640 X 960"
-msgstr ""
+msgstr "iPhone 640 X 960"
#: platform/iphone/export/export.cpp
msgid "iPhone 640 X 1136"
-msgstr ""
+msgstr "iPhone 640 X 1136"
#: platform/iphone/export/export.cpp
msgid "iPhone 750 X 1334"
-msgstr ""
+msgstr "iPhone 750 X 1334"
#: platform/iphone/export/export.cpp
msgid "iPhone 1125 X 2436"
-msgstr ""
+msgstr "iPhone 1125 X 2436"
#: platform/iphone/export/export.cpp
msgid "iPad 768 X 1024"
-msgstr ""
+msgstr "iPad 768 X 1024"
#: platform/iphone/export/export.cpp
msgid "iPad 1536 X 2048"
-msgstr ""
+msgstr "iPad 1536 X 2048"
#: platform/iphone/export/export.cpp
msgid "iPhone 1242 X 2208"
-msgstr ""
+msgstr "iPhone 1242 X 2208"
#: platform/iphone/export/export.cpp
msgid "App Store Team ID"
@@ -19466,7 +19238,7 @@ msgstr ""
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Info"
-msgstr ""
+msgstr "Informação"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier"
@@ -19536,23 +19308,23 @@ msgstr "Descrições da Propriedade"
#: platform/iphone/export/export.cpp
msgid "iPhone 120 X 120"
-msgstr ""
+msgstr "iPhone 120 X 120"
#: platform/iphone/export/export.cpp
msgid "iPhone 180 X 180"
-msgstr ""
+msgstr "iPhone 180 X 180"
#: platform/iphone/export/export.cpp
msgid "iPad 76 X 76"
-msgstr ""
+msgstr "iPad 76 X 76"
#: platform/iphone/export/export.cpp
msgid "iPad 152 X 152"
-msgstr ""
+msgstr "iPad 152 X 152"
#: platform/iphone/export/export.cpp
msgid "iPad 167 X 167"
-msgstr ""
+msgstr "iPad 167 X 167"
#: platform/iphone/export/export.cpp
msgid "App Store 1024 X 1024"
@@ -19636,14 +19408,12 @@ msgid "Could not open template for export: \"%s\"."
msgstr "Não foi possível abrir o modelo para exportação: \"%s\"."
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Invalid export template: \"%s\"."
-msgstr "Template de exportação inválido:"
+msgstr "Template de exportação inválido: \"%s\"."
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file: \"%s\"."
-msgstr "Não foi possível escrever o arquivo:"
+msgstr "Não foi possível escrever o arquivo: \"%s\"."
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -19656,7 +19426,7 @@ msgstr "Não foi possível ler o arquivo: \"%s\"."
#: platform/javascript/export/export.cpp
msgid "PWA"
-msgstr ""
+msgstr "PWA"
#: platform/javascript/export/export.cpp
msgid "Variant"
@@ -19674,15 +19444,15 @@ msgstr "Expressão"
#: platform/javascript/export/export.cpp
msgid "For Desktop"
-msgstr ""
+msgstr "Para Desktop"
#: platform/javascript/export/export.cpp
msgid "For Mobile"
-msgstr ""
+msgstr "Para Mobile"
#: platform/javascript/export/export.cpp
msgid "HTML"
-msgstr ""
+msgstr "HTML"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -19703,8 +19473,9 @@ msgid "Canvas Resize Policy"
msgstr ""
#: platform/javascript/export/export.cpp
+#, fuzzy
msgid "Focus Canvas On Start"
-msgstr ""
+msgstr "Focar Canvas ao Iniciar"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -19713,11 +19484,11 @@ msgstr "Filtrar sinais"
#: platform/javascript/export/export.cpp
msgid "Progressive Web App"
-msgstr ""
+msgstr "Progressive Web App"
#: platform/javascript/export/export.cpp
msgid "Offline Page"
-msgstr ""
+msgstr "Página Offline"
#: platform/javascript/export/export.cpp
msgid "Icon 144 X 144"
@@ -19736,9 +19507,8 @@ msgid "Could not read HTML shell: \"%s\"."
msgstr "Não foi possível ler o shell HTML: \"%s\"."
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory: %s."
-msgstr "Não foi possível criar o diretório do servidor HTTP:"
+msgstr "Não foi possível criar o diretório do servidor HTTP: \"%s\"."
#: platform/javascript/export/export.cpp
msgid "Error starting HTTP server: %d."
@@ -19746,7 +19516,7 @@ msgstr "Erro ao iniciar o servidor HTTP: %d."
#: platform/javascript/export/export.cpp
msgid "Web"
-msgstr ""
+msgstr "Web"
#: platform/javascript/export/export.cpp
msgid "HTTP Host"
@@ -19763,7 +19533,7 @@ msgstr "Use Encaixar"
#: platform/javascript/export/export.cpp
msgid "SSL Key"
-msgstr ""
+msgstr "Chave SSL"
#: platform/osx/export/codesign.cpp
msgid "Can't get filesystem access."
@@ -19803,7 +19573,7 @@ msgstr "Caminho base inválido."
#: platform/osx/export/codesign.cpp
msgid "Already signed!"
-msgstr ""
+msgstr "Já assinado!"
#: platform/osx/export/codesign.cpp
#, fuzzy
@@ -19843,7 +19613,7 @@ msgstr ""
#: platform/osx/export/codesign.cpp
msgid "Unknown object type."
-msgstr ""
+msgstr "Tipo de objeto desconhecido."
#: platform/osx/export/export.cpp
msgid "App Category"
@@ -19851,7 +19621,7 @@ msgstr "Categoria do Aplicativo"
#: platform/osx/export/export.cpp
msgid "High Res"
-msgstr ""
+msgstr "Alta Resolução"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -19931,7 +19701,7 @@ msgstr "Recortar Nós"
#: platform/osx/export/export.cpp
msgid "Allow JIT Code Execution"
-msgstr ""
+msgstr "Permitir Execução de Código JIT"
#: platform/osx/export/export.cpp
msgid "Allow Unsigned Executable Memory"
@@ -19953,7 +19723,7 @@ msgstr "Adicionar Entrada"
#: platform/osx/export/export.cpp
msgid "Address Book"
-msgstr ""
+msgstr "Contatos"
#: platform/osx/export/export.cpp
msgid "Calendars"
@@ -19995,7 +19765,7 @@ msgstr "Dispositivo"
#: platform/osx/export/export.cpp
msgid "Device Bluetooth"
-msgstr ""
+msgstr "Bluetooth do Dispositivo"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -20067,6 +19837,8 @@ msgid ""
"You can check progress manually by opening a Terminal and running the "
"following command:"
msgstr ""
+"Você pode verificar o progresso manualmente abrindo um Terminal e rodando o "
+"seguinte comando:"
#: platform/osx/export/export.cpp
msgid ""
@@ -20096,6 +19868,8 @@ msgid ""
"Could not start codesign executable, make sure Xcode command line tools are "
"installed."
msgstr ""
+"Não foi possível iniciar o executável codesign, tenha certeza que as "
+"utilidades de linha de comando do Xcode estão instaladas."
#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
@@ -20156,7 +19930,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid "Making PKG"
-msgstr ""
+msgstr "Criando PKG"
#: platform/osx/export/export.cpp
msgid ""
@@ -20170,7 +19944,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid "Making DMG"
-msgstr ""
+msgstr "Criando DMG"
#: platform/osx/export/export.cpp
msgid "Code signing DMG"
@@ -20178,7 +19952,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid "Making ZIP"
-msgstr ""
+msgstr "Criando ZIP"
#: platform/osx/export/export.cpp
msgid ""
@@ -20341,7 +20115,7 @@ msgstr "Nome Curto"
#: platform/uwp/export/export.cpp
msgid "Publisher"
-msgstr ""
+msgstr "Publicadora"
#: platform/uwp/export/export.cpp
msgid "Publisher Display Name"
@@ -20389,7 +20163,7 @@ msgstr "Revisão"
#: platform/uwp/export/export.cpp
msgid "Landscape"
-msgstr ""
+msgstr "Paisagem"
#: platform/uwp/export/export.cpp
#, fuzzy
@@ -20398,11 +20172,11 @@ msgstr "Inverter Horizontalmente"
#: platform/uwp/export/export.cpp
msgid "Landscape Flipped"
-msgstr ""
+msgstr "Paisagem Invertido"
#: platform/uwp/export/export.cpp
msgid "Portrait Flipped"
-msgstr ""
+msgstr "Retrato Invertido"
#: platform/uwp/export/export.cpp
#, fuzzy
@@ -20504,7 +20278,7 @@ msgstr "Dimensões inválidas da tela de abertura (deve ser 620x300)."
#: platform/uwp/export/export.cpp
msgid "UWP"
-msgstr ""
+msgstr "UWP"
#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
@@ -20521,13 +20295,13 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Failed to rename temporary file \"%s\"."
-msgstr "Não é possível remover o arquivo temporário:"
+msgstr "Falha ao renomear arquivo temporário \"%s\"."
#: platform/windows/export/export.cpp
+#, fuzzy
msgid "Identity Type"
-msgstr ""
+msgstr "Tipo de Identidade"
#: platform/windows/export/export.cpp
msgid "Timestamp Server URL"
@@ -20567,7 +20341,7 @@ msgstr "Descrição"
#: platform/windows/export/export.cpp
msgid "Trademarks"
-msgstr ""
+msgstr "Marca Registrada (Trademarks)"
#: platform/windows/export/export.cpp
#, fuzzy
@@ -20673,7 +20447,7 @@ msgstr "Nova Janela"
#: platform/windows/export/export.cpp
msgid "Rcedit"
-msgstr ""
+msgstr "Rcedit"
#: platform/windows/export/export.cpp
msgid "Osslsigncode"
@@ -20872,7 +20646,7 @@ msgstr "Modo de Movimentação"
#: scene/2d/camera_2d.cpp
msgid "Limit"
-msgstr ""
+msgstr "Limite"
#: scene/2d/camera_2d.cpp scene/gui/control.cpp scene/gui/nine_patch_rect.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
@@ -21172,7 +20946,7 @@ msgstr ""
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
msgid "Drawing"
-msgstr ""
+msgstr "Desenhando"
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
@@ -21183,7 +20957,7 @@ msgstr "Projetos Locais"
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/particles.cpp
msgid "Draw Order"
-msgstr ""
+msgstr "Ordem de Desenho"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21240,7 +21014,7 @@ msgstr "Velocidade"
#: scene/resources/particles_material.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
msgid "Angular Velocity"
-msgstr ""
+msgstr "Velocidade Angular"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21309,7 +21083,7 @@ msgstr "Dvidir Curva"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp scene/3d/light.cpp
#: scene/resources/particles_material.cpp
msgid "Angle"
-msgstr ""
+msgstr "Ângulo"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21435,7 +21209,7 @@ msgstr ""
#: scene/2d/joints_2d.cpp scene/resources/animation.cpp
#: scene/resources/ray_shape.cpp scene/resources/segment_shape_2d.cpp
msgid "Length"
-msgstr ""
+msgstr "Comprimento"
#: scene/2d/joints_2d.cpp
#, fuzzy
@@ -21471,7 +21245,7 @@ msgstr "Região da Textura"
#: scene/3d/light.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp scene/resources/sky.cpp
msgid "Energy"
-msgstr ""
+msgstr "Energia"
#: scene/2d/light_2d.cpp
msgid "Z Min"
@@ -21549,7 +21323,7 @@ msgstr "Padrão"
#: scene/2d/line_2d.cpp scene/resources/texture.cpp
msgid "Fill"
-msgstr ""
+msgstr "Preencher"
#: scene/2d/line_2d.cpp scene/resources/texture.cpp
#, fuzzy
@@ -21894,7 +21668,7 @@ msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Mass"
-msgstr ""
+msgstr "Massa"
#: scene/2d/physics_body_2d.cpp
msgid "Inertia"
@@ -21943,7 +21717,7 @@ msgstr "Úmido"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Angular"
-msgstr ""
+msgstr "Angular"
#: scene/2d/physics_body_2d.cpp
msgid "Applied Forces"
@@ -22056,15 +21830,15 @@ msgstr "Criar Nó Shader"
#: scene/2d/ray_cast_2d.cpp scene/3d/ray_cast.cpp
msgid "Collide With"
-msgstr ""
+msgstr "Colidir com"
#: scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp scene/3d/ray_cast.cpp
msgid "Areas"
-msgstr ""
+msgstr "Ãreas"
#: scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp scene/3d/ray_cast.cpp
msgid "Bodies"
-msgstr ""
+msgstr "Corpos"
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
@@ -22306,15 +22080,15 @@ msgstr "Nó de Animação"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Unit dB"
-msgstr ""
+msgstr "Unidade dB"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Unit Size"
-msgstr ""
+msgstr "Tamanho da Unidade"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Max dB"
-msgstr ""
+msgstr "Max dB"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Out Of Range Mode"
@@ -22362,7 +22136,7 @@ msgstr "Empacotando"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/reflection_probe.cpp
msgid "Interior"
-msgstr ""
+msgstr "Interior"
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
@@ -22413,7 +22187,7 @@ msgstr "Usar Redutor de Ruído"
#: scene/3d/baked_lightmap.cpp scene/resources/texture.cpp
msgid "Use HDR"
-msgstr ""
+msgstr "Usar HDR"
#: scene/3d/baked_lightmap.cpp
#, fuzzy
@@ -22512,7 +22286,7 @@ msgstr "Mais próximo"
#: scene/3d/camera.cpp
msgid "Far"
-msgstr ""
+msgstr "Longe"
#: scene/3d/camera.cpp scene/3d/collision_polygon.cpp scene/3d/spring_arm.cpp
#: scene/gui/control.cpp scene/resources/default_theme/default_theme.cpp
@@ -22764,9 +22538,8 @@ msgid "Font"
msgstr "Fontes"
#: scene/3d/label_3d.cpp scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Horizontal Alignment"
-msgstr "Horizontal:"
+msgstr "Alinhamento Horizontal"
#: scene/3d/label_3d.cpp
#, fuzzy
@@ -22877,6 +22650,8 @@ msgid ""
"be removed in a future version. Use 'NavigationServer.map_get_path()' "
"instead."
msgstr ""
+"O nó 'Navigation' e 'Navigation.get_simple_path()' estão depreciados e serão "
+"removidos em versões futuras. Use 'NavigationServer.map_get_path()' no lugar."
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
@@ -23131,15 +22906,15 @@ msgstr "Animação"
#: scene/3d/physics_body.cpp
msgid "X"
-msgstr ""
+msgstr "X"
#: scene/3d/physics_body.cpp
msgid "Y"
-msgstr ""
+msgstr "Y"
#: scene/3d/physics_body.cpp
msgid "Z"
-msgstr ""
+msgstr "Z"
#: scene/3d/physics_body.cpp
#, fuzzy
@@ -23456,7 +23231,7 @@ msgstr "Depurador"
#: scene/3d/ray_cast.cpp scene/resources/style_box.cpp
msgid "Thickness"
-msgstr ""
+msgstr "Espessura"
#: scene/3d/reflection_probe.cpp scene/main/viewport.cpp
#, fuzzy
@@ -23563,7 +23338,7 @@ msgstr "Só Deve existir um RoomManager na SceneTree."
#: scene/3d/room_manager.cpp
msgid "Main"
-msgstr ""
+msgstr "Principal"
#: scene/3d/room_manager.cpp scene/animation/animation_blend_tree.cpp
#: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp
@@ -23789,7 +23564,7 @@ msgstr "Manter Transformação Global"
#: scene/3d/spatial.cpp
msgid "Matrix"
-msgstr ""
+msgstr "Matriz"
#: scene/3d/spatial.cpp
#, fuzzy
@@ -23807,7 +23582,7 @@ msgstr ""
#: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp
msgid "Opacity"
-msgstr ""
+msgstr "Opacidade"
#: scene/3d/sprite_3d.cpp scene/resources/material.cpp
msgid "Transparent"
@@ -23906,9 +23681,8 @@ msgid "Cast Shadow"
msgstr "Criar Nó Shader"
#: scene/3d/visual_instance.cpp
-#, fuzzy
msgid "Extra Cull Margin"
-msgstr "Argumentos de Chamada Extras:"
+msgstr "Margem de Descarte Extra"
#: scene/3d/visual_instance.cpp
#, fuzzy
@@ -23930,9 +23704,8 @@ msgstr ""
#: scene/3d/visual_instance.cpp scene/animation/skeleton_ik.cpp
#: scene/resources/material.cpp
-#, fuzzy
msgid "Min Distance"
-msgstr "Escolha uma Distância:"
+msgstr "Distância Mínima"
#: scene/3d/visual_instance.cpp
msgid "Min Hysteresis"
@@ -23979,33 +23752,28 @@ msgid "Mix Mode"
msgstr "Nó Mix"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Fadein Time"
-msgstr "Tempo do X-Fade (s):"
+msgstr "Tempo de Esmaecer de Entrada"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Fadeout Time"
-msgstr "Tempo do X-Fade (s):"
+msgstr "Tempo de Esmaecer de Saída"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Auto Restart"
-msgstr "Reinício Automático:"
+msgstr "Reinício Automático"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Autorestart"
-msgstr "Reinício Automático:"
+msgstr "Reinício Automático"
#: scene/animation/animation_blend_tree.cpp
msgid "Delay"
-msgstr ""
+msgstr "Atraso"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Random Delay"
-msgstr "Inclinação aleatória:"
+msgstr "Atraso Aleatório"
#: scene/animation/animation_blend_tree.cpp
#, fuzzy
@@ -24029,9 +23797,8 @@ msgstr "Adicionar porta de entrada"
#: scene/animation/animation_blend_tree.cpp
#: scene/animation/animation_node_state_machine.cpp
-#, fuzzy
msgid "Xfade Time"
-msgstr "Tempo do X-Fade (s):"
+msgstr "Tempo do Esmaecer Cruzado"
#: scene/animation/animation_node_state_machine.cpp
#, fuzzy
@@ -24064,7 +23831,7 @@ msgstr "Adicionar Animação"
#: scene/animation/animation_player.cpp
msgid "Reset On Save"
-msgstr ""
+msgstr "Redefinir ao Salvar"
#: scene/animation/animation_player.cpp
#, fuzzy
@@ -24077,9 +23844,8 @@ msgid "Current Animation Position"
msgstr "Adicionar ponto de Animação"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Playback Options"
-msgstr "Opções da Classe:"
+msgstr "Opções de Playback"
#: scene/animation/animation_player.cpp
#, fuzzy
@@ -24122,9 +23888,8 @@ msgid "The AnimationPlayer root node is not a valid node."
msgstr "O nó raiz do AnimationPlayer não é um nó válido."
#: scene/animation/animation_tree.cpp
-#, fuzzy
msgid "Tree Root"
-msgstr "Criar nó raiz:"
+msgstr "Nó Raiz"
#: scene/animation/animation_tree.cpp
#, fuzzy
@@ -24234,7 +23999,7 @@ msgstr "Modo de Seleção"
#: scene/gui/aspect_ratio_container.cpp scene/gui/box_container.cpp
msgid "Alignment"
-msgstr ""
+msgstr "Alinhamento"
#: scene/gui/base_button.cpp
#, fuzzy
@@ -24272,11 +24037,11 @@ msgstr "Copiar Texto"
#: scene/gui/button.cpp scene/gui/label.cpp scene/gui/line_edit.cpp
#: scene/gui/spin_box.cpp
msgid "Align"
-msgstr ""
+msgstr "Alinhar"
#: scene/gui/button.cpp
msgid "Icon Align"
-msgstr ""
+msgstr "Alinhamento do Ãcone"
#: scene/gui/button.cpp
#, fuzzy
@@ -24380,14 +24145,12 @@ msgid "Grow Direction"
msgstr "Direções"
#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
-#, fuzzy
msgid "Min Size"
-msgstr "Tamanho do Contorno:"
+msgstr "Tamanho Mínimo"
#: scene/gui/control.cpp
-#, fuzzy
msgid "Pivot Offset"
-msgstr "Deslocamento da Grade:"
+msgstr "Deslocamento do Pivô"
#: scene/gui/control.cpp
#, fuzzy
@@ -24435,7 +24198,7 @@ msgstr "Anterior"
#: scene/gui/control.cpp
msgid "Mouse"
-msgstr ""
+msgstr "Mouse"
#: scene/gui/control.cpp
msgid "Default Cursor Shape"
@@ -24461,7 +24224,7 @@ msgstr "Propriedades do Tema"
#: scene/gui/dialogs.cpp
msgid "Window Title"
-msgstr ""
+msgstr "Título da Janela"
#: scene/gui/dialogs.cpp
#, fuzzy
@@ -24495,14 +24258,12 @@ msgid "Right Disconnects"
msgstr "Desconectar"
#: scene/gui/graph_edit.cpp
-#, fuzzy
msgid "Scroll Offset"
-msgstr "Deslocamento da Grade:"
+msgstr "Deslocamento da Rolagem"
#: scene/gui/graph_edit.cpp
-#, fuzzy
msgid "Snap Distance"
-msgstr "Escolha uma Distância:"
+msgstr "Distância de Encaixe"
#: scene/gui/graph_edit.cpp
#, fuzzy
@@ -24527,7 +24288,7 @@ msgstr "Mostrar Ossos"
#: scene/gui/graph_edit.cpp scene/gui/text_edit.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Minimap"
-msgstr ""
+msgstr "Mini-Mapa"
#: scene/gui/graph_edit.cpp
msgid "Enable grid minimap."
@@ -24600,9 +24361,8 @@ msgid "Fixed Column Width"
msgstr ""
#: scene/gui/item_list.cpp
-#, fuzzy
msgid "Icon Scale"
-msgstr "Escala aleatória:"
+msgstr "Escala de Ãcone"
#: scene/gui/item_list.cpp
#, fuzzy
@@ -24615,9 +24375,8 @@ msgid "V Align"
msgstr "Atribuir"
#: scene/gui/label.cpp scene/gui/rich_text_label.cpp
-#, fuzzy
msgid "Visible Characters"
-msgstr "Caracteres válidos:"
+msgstr "Caracteres Visiveis"
#: scene/gui/label.cpp scene/gui/rich_text_label.cpp
#, fuzzy
@@ -24641,9 +24400,8 @@ msgid "Secret"
msgstr ""
#: scene/gui/line_edit.cpp
-#, fuzzy
msgid "Secret Character"
-msgstr "Caracteres válidos:"
+msgstr "Caracteres Secretos"
#: scene/gui/line_edit.cpp
msgid "Expand To Text Length"
@@ -24704,16 +24462,15 @@ msgstr ""
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Blink"
-msgstr ""
+msgstr "Piscar"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
-#, fuzzy
msgid "Blink Speed"
-msgstr "Velocidade:"
+msgstr "Velocidade de Piscar"
#: scene/gui/link_button.cpp
msgid "Underline"
-msgstr ""
+msgstr "Sublinhado"
#: scene/gui/menu_button.cpp
#, fuzzy
@@ -24796,9 +24553,8 @@ msgid "Allow Search"
msgstr "Pesquisar"
#: scene/gui/progress_bar.cpp
-#, fuzzy
msgid "Percent"
-msgstr "Recente:"
+msgstr "Porcentagem"
#: scene/gui/range.cpp
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
@@ -24858,9 +24614,8 @@ msgid "Absolute Index"
msgstr "Auto Recuar"
#: scene/gui/rich_text_effect.cpp
-#, fuzzy
msgid "Elapsed Time"
-msgstr "Tempos de Mistura:"
+msgstr "Tempo Decorrido"
#: scene/gui/rich_text_effect.cpp
#, fuzzy
@@ -24868,9 +24623,8 @@ msgid "Env"
msgstr "Fim"
#: scene/gui/rich_text_effect.cpp
-#, fuzzy
msgid "Character"
-msgstr "Caracteres válidos:"
+msgstr "Caractere"
#: scene/gui/rich_text_label.cpp
msgid "BBCode"
@@ -24881,9 +24635,8 @@ msgid "Meta Underlined"
msgstr ""
#: scene/gui/rich_text_label.cpp
-#, fuzzy
msgid "Tab Size"
-msgstr "Tamanho:"
+msgstr "Tamanho da Tabulação"
#: scene/gui/rich_text_label.cpp
#, fuzzy
@@ -24904,9 +24657,8 @@ msgid "Selection Enabled"
msgstr "Selecionar Apenas"
#: scene/gui/rich_text_label.cpp scene/gui/text_edit.cpp
-#, fuzzy
msgid "Override Selected Font Color"
-msgstr "Configurar Perfil Selecionado:"
+msgstr "Sobrescrever Cor da Fonte Selecionada"
#: scene/gui/rich_text_label.cpp
#, fuzzy
@@ -24934,9 +24686,8 @@ msgid "Follow Focus"
msgstr "Popular Superfície"
#: scene/gui/scroll_container.cpp
-#, fuzzy
msgid "Horizontal Enabled"
-msgstr "Horizontal:"
+msgstr "Horizontal Habilitado"
#: scene/gui/scroll_container.cpp
#, fuzzy
@@ -24957,24 +24708,20 @@ msgid "Tick Count"
msgstr "Escolher Cor"
#: scene/gui/slider.cpp
-#, fuzzy
msgid "Ticks On Borders"
-msgstr "Renomear pasta:"
+msgstr "Pontos Nas Bordas"
#: scene/gui/spin_box.cpp
-#, fuzzy
msgid "Prefix"
-msgstr "Prefixo:"
+msgstr "Prefixo"
#: scene/gui/spin_box.cpp
-#, fuzzy
msgid "Suffix"
-msgstr "Sufixo:"
+msgstr "Sufixo"
#: scene/gui/split_container.cpp
-#, fuzzy
msgid "Split Offset"
-msgstr "Deslocamento da Grade:"
+msgstr "Deslocamento de Divisão"
#: scene/gui/split_container.cpp scene/gui/tree.cpp
#, fuzzy
@@ -24991,9 +24738,8 @@ msgid "Tab Align"
msgstr ""
#: scene/gui/tab_container.cpp scene/gui/tabs.cpp
-#, fuzzy
msgid "Current Tab"
-msgstr "Atual:"
+msgstr "Aba Atual"
#: scene/gui/tab_container.cpp
#, fuzzy
@@ -25035,9 +24781,8 @@ msgid "Breakpoint Gutter"
msgstr "Pular Breakpoints"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Fold Gutter"
-msgstr "Pasta:"
+msgstr "Espaçamento de Dobra"
#: scene/gui/text_edit.cpp
#, fuzzy
@@ -25055,19 +24800,16 @@ msgid "Wrap Enabled"
msgstr "Habilitar"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Scroll Vertical"
-msgstr "Vertical:"
+msgstr "Scroll Vertical"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Scroll Horizontal"
-msgstr "Horizontal:"
+msgstr "Scroll Horizontal"
#: scene/gui/text_edit.cpp
-#, fuzzy
msgid "Draw"
-msgstr "Chamadas de Desenho:"
+msgstr "Desenhar"
#: scene/gui/text_edit.cpp
#, fuzzy
@@ -25125,9 +24867,8 @@ msgid "Progress Offset"
msgstr ""
#: scene/gui/texture_progress.cpp
-#, fuzzy
msgid "Fill Mode"
-msgstr "Modo Panorâmico:"
+msgstr "Modo de Preenchimento"
#: scene/gui/texture_progress.cpp scene/resources/material.cpp
msgid "Tint"
@@ -25195,9 +24936,8 @@ msgid "Hide Folding"
msgstr "Botão Desativado"
#: scene/gui/tree.cpp
-#, fuzzy
msgid "Hide Root"
-msgstr "Criar nó raiz:"
+msgstr "Esconder Raiz"
#: scene/gui/tree.cpp
msgid "Drop Mode Flags"
@@ -25210,7 +24950,7 @@ msgstr "Adicionar Faixa"
#: scene/gui/video_player.cpp scene/main/scene_tree.cpp scene/main/timer.cpp
msgid "Paused"
-msgstr ""
+msgstr "Pausado"
#: scene/gui/video_player.cpp
#, fuzzy
@@ -25295,19 +25035,16 @@ msgid "Filename"
msgstr "Renomear"
#: scene/main/node.cpp
-#, fuzzy
msgid "Owner"
-msgstr "Donos De:"
+msgstr "Dono"
#: scene/main/node.cpp scene/main/scene_tree.cpp
-#, fuzzy
msgid "Multiplayer"
-msgstr "Definir Múltiplos:"
+msgstr "Multijogador"
#: scene/main/node.cpp
-#, fuzzy
msgid "Custom Multiplayer"
-msgstr "Definir Múltiplos:"
+msgstr "Multijogador Personalizado"
#: scene/main/node.cpp
#, fuzzy
@@ -25340,17 +25077,16 @@ msgstr "Nova Raiz de Cena"
#: scene/main/scene_tree.cpp
msgid "Root"
-msgstr ""
+msgstr "Raiz"
#: scene/main/scene_tree.cpp
-#, fuzzy
msgid "Multiplayer Poll"
-msgstr "Definir Múltiplos:"
+msgstr ""
#: scene/main/scene_tree.cpp scene/resources/mesh_library.cpp
#: scene/resources/shape_2d.cpp
msgid "Shapes"
-msgstr ""
+msgstr "Formas"
#: scene/main/scene_tree.cpp
msgid "Shape Color"
@@ -25384,9 +25120,8 @@ msgid "Reflections"
msgstr "Reflexões"
#: scene/main/scene_tree.cpp
-#, fuzzy
msgid "Atlas Size"
-msgstr "Tamanho do Contorno:"
+msgstr "Tamanho do Atlas"
#: scene/main/scene_tree.cpp
msgid "Atlas Subdiv"
@@ -25398,7 +25133,7 @@ msgstr ""
#: scene/main/scene_tree.cpp
msgid "Use FXAA"
-msgstr ""
+msgstr "Usar FXAA"
#: scene/main/scene_tree.cpp
msgid "Use Debanding"
@@ -25406,7 +25141,7 @@ msgstr ""
#: scene/main/scene_tree.cpp scene/main/viewport.cpp
msgid "HDR"
-msgstr ""
+msgstr "HDR"
#: scene/main/scene_tree.cpp scene/main/viewport.cpp
msgid "Use 32 BPC Depth"
@@ -25444,9 +25179,8 @@ msgstr ""
"Timer para tempos de espera muito baixos."
#: scene/main/timer.cpp
-#, fuzzy
msgid "Autostart"
-msgstr "Reinício Automático:"
+msgstr "Início Automático"
#: scene/main/viewport.cpp
#, fuzzy
@@ -25472,7 +25206,7 @@ msgstr ""
#: scene/main/viewport.cpp
msgid "ARVR"
-msgstr ""
+msgstr "ARVR"
#: scene/main/viewport.cpp
#, fuzzy
@@ -25485,11 +25219,11 @@ msgstr ""
#: scene/main/viewport.cpp scene/resources/world_2d.cpp
msgid "World"
-msgstr ""
+msgstr "Mundo"
#: scene/main/viewport.cpp
msgid "World 2D"
-msgstr ""
+msgstr "Mundo 2D"
#: scene/main/viewport.cpp
#, fuzzy
@@ -25503,7 +25237,7 @@ msgstr "Alterar Valor da Entrada"
#: scene/main/viewport.cpp
msgid "FXAA"
-msgstr ""
+msgstr "FXAA"
#: scene/main/viewport.cpp
#, fuzzy
@@ -25521,8 +25255,9 @@ msgid "Keep 3D Linear"
msgstr "Linear Esquerda"
#: scene/main/viewport.cpp
+#, fuzzy
msgid "Render Direct To Screen"
-msgstr ""
+msgstr "Renderizar Diretamente para a Tela"
#: scene/main/viewport.cpp
#, fuzzy
@@ -25530,9 +25265,8 @@ msgid "Debug Draw"
msgstr "Depuração"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Render Target"
-msgstr "Renderizador:"
+msgstr "Alvo do Renderizador"
#: scene/main/viewport.cpp
msgid "V Flip"
@@ -25640,7 +25374,7 @@ msgstr "Navegação"
#: scene/register_scene_types.cpp
msgid "Use hiDPI"
-msgstr ""
+msgstr "Usar hiDPI"
#: scene/register_scene_types.cpp
#, fuzzy
@@ -25660,12 +25394,11 @@ msgstr "Nó Mix"
#: scene/resources/audio_stream_sample.cpp
msgid "Stereo"
-msgstr ""
+msgstr "Stereo"
#: scene/resources/concave_polygon_shape_2d.cpp
-#, fuzzy
msgid "Segments"
-msgstr "Argumentos da Cena Principal:"
+msgstr "Segmentos"
#: scene/resources/curve.cpp
#, fuzzy
@@ -25678,7 +25411,7 @@ msgstr ""
#: scene/resources/default_theme/default_theme.cpp
msgid "Panel"
-msgstr ""
+msgstr "Painel"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -25706,9 +25439,8 @@ msgid "Font Color Disabled"
msgstr "Corte Desabilitado"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "H Separation"
-msgstr "Separação:"
+msgstr "Separação Horizontal"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -25717,7 +25449,7 @@ msgstr "Loop da Animação"
#: scene/resources/default_theme/default_theme.cpp
msgid "Arrow"
-msgstr ""
+msgstr "Seta"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -25796,14 +25528,12 @@ msgid "Font Outline Modulate"
msgstr "Forçar Módulo Branco"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Shadow Offset X"
-msgstr "Deslocamento da Grade X:"
+msgstr "Deslocamento da Sombra em X"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Shadow Offset Y"
-msgstr "Deslocamento da Grade Y:"
+msgstr "Deslocamento da Sombra em Y"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -25861,14 +25591,12 @@ msgid "Space"
msgstr "Cena Principal"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Folded"
-msgstr "Pasta:"
+msgstr "Dobrado"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Fold"
-msgstr "Pasta:"
+msgstr "Dobrar"
#: scene/resources/default_theme/default_theme.cpp
msgid "Font Color Readonly"
@@ -26036,9 +25764,8 @@ msgid "Font Color Separator"
msgstr "Separador de Cor da Fonte"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "V Separation"
-msgstr "Separação:"
+msgstr "Separação Vertical"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26091,9 +25818,8 @@ msgid "Close Offset"
msgstr "Deslocamento do Ruído"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Port Offset"
-msgstr "Deslocamento da Grade:"
+msgstr "Deslocamento de Porta"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26203,14 +25929,12 @@ msgid "Draw Guides"
msgstr "Mostrar Guias"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Scroll Border"
-msgstr "Vertical:"
+msgstr "Borda da Barra de Rolagem"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Scroll Speed"
-msgstr "Deslocamento da Grade:"
+msgstr "Velocidade de Rolagem"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26218,9 +25942,8 @@ msgid "Icon Margin"
msgstr "Definir Margem"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Line Separation"
-msgstr "Separação:"
+msgstr "Separação de Linha"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26239,7 +25962,7 @@ msgstr "Item Desativado"
#: scene/resources/default_theme/default_theme.cpp
msgid "Menu"
-msgstr ""
+msgstr "Menu"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26280,9 +26003,8 @@ msgid "Large"
msgstr "Destino"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Folder"
-msgstr "Pasta:"
+msgstr "Pasta"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26374,7 +26096,7 @@ msgstr "Cena Principal"
#: scene/resources/default_theme/default_theme.cpp
msgid "Bold Italics Font"
-msgstr ""
+msgstr "Fonte Negrito Itálica"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26382,14 +26104,12 @@ msgid "Mono Font"
msgstr "Cena Principal"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Table H Separation"
-msgstr "Separação:"
+msgstr "Separação Horizontal da Tabela"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Table V Separation"
-msgstr "Separação:"
+msgstr "Separação Vertical da Tabela"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26418,11 +26138,11 @@ msgstr "Auto Fatiar"
#: scene/resources/default_theme/default_theme.cpp
msgid "Minus"
-msgstr ""
+msgstr "Menos"
#: scene/resources/default_theme/default_theme.cpp
msgid "More"
-msgstr ""
+msgstr "Mais"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26482,9 +26202,8 @@ msgid "Font Path"
msgstr "Habilitar"
#: scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Outline Size"
-msgstr "Tamanho do Contorno:"
+msgstr "Tamanho do Contorno"
#: scene/resources/dynamic_font.cpp
#, fuzzy
@@ -26497,14 +26216,12 @@ msgid "Use Mipmaps"
msgstr "Sinais"
#: scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Extra Spacing"
-msgstr "Opções Extra:"
+msgstr "Espaçamento Extra"
#: scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Char"
-msgstr "Caracteres válidos:"
+msgstr "Caractere"
#: scene/resources/dynamic_font.cpp
#, fuzzy
@@ -26517,7 +26234,7 @@ msgstr ""
#: scene/resources/environment.cpp scene/resources/sky.cpp
msgid "Sky"
-msgstr ""
+msgstr "Céu"
#: scene/resources/environment.cpp
#, fuzzy
@@ -26530,9 +26247,8 @@ msgid "Sky Orientation"
msgstr "Documentação Online"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Sky Rotation"
-msgstr "Passo de Rotação:"
+msgstr "Rotação do Céu"
#: scene/resources/environment.cpp
msgid "Sky Rotation Degrees"
@@ -26561,14 +26277,12 @@ msgid "Fog"
msgstr "Névoa"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Sun Color"
-msgstr "Armazenando Arquivo:"
+msgstr "Cor do Sol"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Sun Amount"
-msgstr "Quantidade:"
+msgstr "Quantidade do Sol"
#: scene/resources/environment.cpp
#, fuzzy
@@ -26632,7 +26346,7 @@ msgstr "Exportação"
#: scene/resources/environment.cpp
msgid "White"
-msgstr ""
+msgstr "Branco"
#: scene/resources/environment.cpp
msgid "Auto Exposure"
@@ -26657,14 +26371,12 @@ msgid "Max Steps"
msgstr "Passo"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Fade In"
-msgstr "[i]Fade In[/i](s):"
+msgstr "Esmaecer de Entrada"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Fade Out"
-msgstr "[i]Fade Out[/i](s):"
+msgstr "Esmaecer de Saída"
#: scene/resources/environment.cpp
#, fuzzy
@@ -26677,12 +26389,11 @@ msgstr "Rugosidade"
#: scene/resources/environment.cpp
msgid "SSAO"
-msgstr ""
+msgstr "SSAO"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Radius 2"
-msgstr "Raio:"
+msgstr "Raio 2"
#: scene/resources/environment.cpp
msgid "Intensity 2"
@@ -26700,7 +26411,7 @@ msgstr "Depuração do Canal UV"
#: scene/resources/environment.cpp
msgid "Blur"
-msgstr ""
+msgstr "Blur"
#: scene/resources/environment.cpp
msgid "Edge Sharpness"
@@ -26711,9 +26422,8 @@ msgid "DOF Far Blur"
msgstr ""
#: scene/resources/environment.cpp scene/resources/material.cpp
-#, fuzzy
msgid "Distance"
-msgstr "Escolha uma Distância:"
+msgstr "Distância"
#: scene/resources/environment.cpp
msgid "Transition"
@@ -26796,18 +26506,16 @@ msgid "Brightness"
msgstr "Luz"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Saturation"
-msgstr "Separação:"
+msgstr "Separação"
#: scene/resources/environment.cpp
msgid "Color Correction"
msgstr "Correção de Cor"
#: scene/resources/font.cpp
-#, fuzzy
msgid "Ascent"
-msgstr "Recente:"
+msgstr "Subida"
#: scene/resources/font.cpp
#, fuzzy
@@ -26820,9 +26528,8 @@ msgid "Raw Data"
msgstr "Profundidade"
#: scene/resources/gradient.cpp
-#, fuzzy
msgid "Offsets"
-msgstr "Deslocamento:"
+msgstr "Deslocamentos"
#: scene/resources/height_map_shape.cpp
msgid "Map Width"
@@ -26902,7 +26609,7 @@ msgstr ""
#: scene/resources/material.cpp
msgid "Is sRGB"
-msgstr ""
+msgstr "É sRGB"
#: scene/resources/material.cpp servers/visual_server.cpp
msgid "Parameters"
@@ -26948,9 +26655,8 @@ msgid "Grow"
msgstr "Crescer"
#: scene/resources/material.cpp
-#, fuzzy
msgid "Grow Amount"
-msgstr "Quantidade:"
+msgstr "Quantidade de Crescimento"
#: scene/resources/material.cpp
msgid "Use Alpha Scissor"
@@ -27105,7 +26811,7 @@ msgstr "Faça mapas de luz"
#: scene/resources/mesh.cpp scene/resources/primitive_meshes.cpp
msgid "Custom AABB"
-msgstr ""
+msgstr "AABB Personalizado"
#: scene/resources/mesh_library.cpp
#, fuzzy
@@ -27139,9 +26845,8 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-#, fuzzy
msgid "Sampling"
-msgstr "Escala:"
+msgstr "Mostragem"
#: scene/resources/navigation_mesh.cpp
#, fuzzy
@@ -27162,12 +26867,11 @@ msgstr "Origem do Nome do Grupo"
#: scene/resources/navigation_mesh.cpp
msgid "Cells"
-msgstr ""
+msgstr "Células"
#: scene/resources/navigation_mesh.cpp
-#, fuzzy
msgid "Agents"
-msgstr "Argumentos da Cena Principal:"
+msgstr "Agentes"
#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
@@ -27189,7 +26893,7 @@ msgstr "Fundir a partir de Cena"
#: scene/resources/navigation_mesh.cpp
msgid "Edges"
-msgstr ""
+msgstr "Arestas"
#: scene/resources/navigation_mesh.cpp
#, fuzzy
@@ -27206,9 +26910,8 @@ msgid "Details"
msgstr "Detalhe"
#: scene/resources/navigation_mesh.cpp
-#, fuzzy
msgid "Sample Distance"
-msgstr "Escolha uma Distância:"
+msgstr "Distância de Amostra"
#: scene/resources/navigation_mesh.cpp
#, fuzzy
@@ -27278,9 +26981,8 @@ msgid "Color Modifier"
msgstr "Modificador de velocidade lenta da Visão Livre"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Point Texture"
-msgstr "Pontos de Emissão:"
+msgstr "Textura de Ponto"
#: scene/resources/particles_material.cpp
msgid "Normal Texture"
@@ -27297,9 +26999,8 @@ msgid "Point Count"
msgstr "Adicionar porta de entrada"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Scale Random"
-msgstr "Razão de Escala:"
+msgstr "Randomização de Escala"
#: scene/resources/particles_material.cpp
#, fuzzy
@@ -27315,9 +27016,8 @@ msgid "Absorbent"
msgstr ""
#: scene/resources/plane_shape.cpp
-#, fuzzy
msgid "Plane"
-msgstr "Plano:"
+msgstr "Plano"
#: scene/resources/primitive_meshes.cpp
#, fuzzy
@@ -27341,9 +27041,8 @@ msgid "Subdivide Depth"
msgstr ""
#: scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Top Radius"
-msgstr "Raio:"
+msgstr "Raio do Topo"
#: scene/resources/primitive_meshes.cpp
#, fuzzy
@@ -27392,13 +27091,12 @@ msgid "Bone"
msgstr "Ossos"
#: scene/resources/sky.cpp
-#, fuzzy
msgid "Radiance Size"
-msgstr "Tamanho do Contorno:"
+msgstr "Tamanho da Radiância"
#: scene/resources/sky.cpp
msgid "Panorama"
-msgstr ""
+msgstr "Panorama"
#: scene/resources/sky.cpp
#, fuzzy
@@ -27406,9 +27104,8 @@ msgid "Top Color"
msgstr "Próximo Chão"
#: scene/resources/sky.cpp
-#, fuzzy
msgid "Horizon Color"
-msgstr "Armazenando Arquivo:"
+msgstr "Cor do Horizonte"
#: scene/resources/sky.cpp
#, fuzzy
@@ -27432,7 +27129,7 @@ msgstr "Substituir"
#: scene/resources/sky.cpp
msgid "Longitude"
-msgstr ""
+msgstr "Longitude"
#: scene/resources/sky.cpp
msgid "Angle Min"
@@ -27467,7 +27164,7 @@ msgstr ""
#: scene/resources/style_box.cpp
msgid "Anti Aliasing"
-msgstr ""
+msgstr "Anti Aliasing"
#: scene/resources/style_box.cpp
msgid "Grow Begin"
@@ -27517,9 +27214,8 @@ msgid "Lossy Storage Quality"
msgstr "Capturar"
#: scene/resources/texture.cpp
-#, fuzzy
msgid "From"
-msgstr "Modo Panorâmico:"
+msgstr "À Partir de"
#: scene/resources/texture.cpp
#, fuzzy
@@ -27723,9 +27419,8 @@ msgid "Audio Stream"
msgstr "Item Rádio"
#: servers/audio/audio_stream.cpp
-#, fuzzy
msgid "Random Pitch"
-msgstr "Inclinação aleatória:"
+msgstr "Timbre Aleatório"
#: servers/audio/effects/audio_effect_capture.cpp
#: servers/audio/effects/audio_effect_spectrum_analyzer.cpp
@@ -27741,21 +27436,21 @@ msgstr ""
#: servers/audio/effects/audio_effect_delay.cpp
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Dry"
-msgstr ""
+msgstr "Seco"
#: servers/audio/effects/audio_effect_chorus.cpp
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Wet"
-msgstr ""
+msgstr "Molhado"
#: servers/audio/effects/audio_effect_chorus.cpp
msgid "Voice"
-msgstr ""
+msgstr "Voz"
#: servers/audio/effects/audio_effect_chorus.cpp
#: servers/audio/effects/audio_effect_delay.cpp
msgid "Delay (ms)"
-msgstr ""
+msgstr "Atraso (ms)"
#: servers/audio/effects/audio_effect_chorus.cpp
#: servers/audio/effects/audio_effect_phaser.cpp
@@ -27770,23 +27465,22 @@ msgstr "Profundidade"
#: servers/audio/effects/audio_effect_chorus.cpp
#: servers/audio/effects/audio_effect_delay.cpp
msgid "Level dB"
-msgstr ""
+msgstr "Nível dB"
#: servers/audio/effects/audio_effect_chorus.cpp
#: servers/audio/effects/audio_effect_delay.cpp
#: servers/audio/effects/audio_effect_panner.cpp
-#, fuzzy
msgid "Pan"
-msgstr "Plano:"
+msgstr "Panoramizar"
#: servers/audio/effects/audio_effect_compressor.cpp
#: servers/audio/effects/audio_effect_filter.cpp
msgid "Gain"
-msgstr ""
+msgstr "Ganho"
#: servers/audio/effects/audio_effect_compressor.cpp
msgid "Attack (µs)"
-msgstr ""
+msgstr "Ataque (µs)"
#: servers/audio/effects/audio_effect_compressor.cpp
#, fuzzy
@@ -27823,7 +27517,7 @@ msgstr "Ignorar"
#: servers/audio/effects/audio_effect_distortion.cpp
msgid "Pre Gain"
-msgstr ""
+msgstr "Pré Ganho"
#: servers/audio/effects/audio_effect_distortion.cpp
msgid "Keep Hf Hz"
@@ -27831,7 +27525,7 @@ msgstr ""
#: servers/audio/effects/audio_effect_distortion.cpp
msgid "Drive"
-msgstr ""
+msgstr "Drive"
#: servers/audio/effects/audio_effect_distortion.cpp
#, fuzzy
@@ -27873,21 +27567,20 @@ msgstr ""
#: servers/audio/effects/audio_effect_pitch_shift.cpp
#: servers/audio/effects/audio_effect_spectrum_analyzer.cpp
-#, fuzzy
msgid "FFT Size"
-msgstr "Tamanho:"
+msgstr "Tamanho FFT"
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Predelay"
-msgstr ""
+msgstr "Pré Atraso"
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Msec"
-msgstr ""
+msgstr "Msec"
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Room Size"
-msgstr ""
+msgstr "Tamanho da Sala"
#: servers/audio/effects/audio_effect_reverb.cpp
#, fuzzy
@@ -27970,9 +27663,8 @@ msgid "Time Before Sleep"
msgstr ""
#: servers/physics_2d/physics_2d_server_sw.cpp
-#, fuzzy
msgid "BP Hash Table Size"
-msgstr "Tamanho:"
+msgstr "Tamanho da \"BP Hash Table\""
#: servers/physics_2d/physics_2d_server_sw.cpp
msgid "Large Object Surface Threshold In Cells"
@@ -28345,7 +28037,7 @@ msgstr ""
#: servers/visual_server.cpp
msgid "Compatibility"
-msgstr ""
+msgstr "Compatibilidade"
#: servers/visual_server.cpp
msgid "Disable Half Float"
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 395185bd3e..aaa6e1cbcb 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -2186,14 +2186,15 @@ msgstr "Favorite:"
msgid "Recent:"
msgstr "Recent:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Cautați:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Potriviri:"
@@ -2253,8 +2254,8 @@ msgstr "Cautați Înlocuitor Resursă:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5633,6 +5634,10 @@ msgid "Drag And Drop Selection"
msgstr "Toată selecția"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12024,6 +12029,11 @@ msgid "New Animation"
msgstr "Animație"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Metode de filtrare"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index befaceac4c..c50dce8e01 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -85,7 +85,7 @@
# kyanukovich <ianu0001@algonquinlive.com>, 2020.
# Ron788 <ustinov200511@gmail.com>, 2020.
# Daniel <dan.ef1999@gmail.com>, 2020.
-# NeoLan Qu <it.bulla@mail.ru>, 2020.
+# NeoLan Qu <it.bulla@mail.ru>, 2020, 2022.
# Nikita Epifanov <nikgreens@protonmail.com>, 2020.
# Cube Show <griiv.06@gmail.com>, 2020.
# Roman Tolkachyov <roman@tolkachyov.name>, 2020.
@@ -118,13 +118,14 @@
# Jasuse <jasusemaele@gmail.com>, 2022.
# Vadim Mitroshkin <Vadim7540@yandex.ru>, 2022.
# Maksim Marchukov <mar.maksim63@gmail.com>, 2022.
+# Slava Beloglazov <slavathedeveloper@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-17 07:14+0000\n"
-"Last-Translator: Maksim Marchukov <mar.maksim63@gmail.com>\n"
+"PO-Revision-Date: 2022-07-26 01:55+0000\n"
+"Last-Translator: NeoLan Qu <it.bulla@mail.ru>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
"Language: ru\n"
@@ -561,7 +562,7 @@ msgstr "Давление"
#: core/os/input_event.cpp
msgid "Pen Inverted"
-msgstr ""
+msgstr "Перо Инвертировано"
#: core/os/input_event.cpp
msgid "Relative"
@@ -1244,9 +1245,8 @@ msgid "Value"
msgstr "Значение"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "КоличеÑтво"
+msgstr "КоличеÑтво Ðргументов"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
@@ -1437,24 +1437,22 @@ msgid "(Invalid, expected type: %s)"
msgstr "(Ðеверный, ожидаемый тип: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Переход В-ИЗ"
+msgstr "Переход В-ИЗ:"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "In-Handle:"
-msgstr "Задать обработчик"
+msgstr "Обработчик Ввода:"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Out-Handle:"
-msgstr "Задать обработчик"
+msgstr "Обработчик Вывода:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "Поток"
+msgstr "Поток:"
#: editor/animation_track_editor.cpp
msgid "Start (s):"
@@ -2215,14 +2213,15 @@ msgstr "Избранное:"
msgid "Recent:"
msgstr "Ðедавнее:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "ПоиÑк:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "СовпадениÑ:"
@@ -2282,8 +2281,8 @@ msgstr "Ðайти заменÑемый реÑурÑ:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2292,7 +2291,7 @@ msgstr "Открыть"
#: editor/dependency_editor.cpp
msgid "Owners of: %s (Total: %d)"
-msgstr ""
+msgstr "Владельцы: %s (Ð’Ñего: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2342,9 +2341,8 @@ msgid "Fix Dependencies"
msgstr "ИÑправить завиÑимоÑти"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Errors loading!"
-msgstr "Ошибки загружаютÑÑ!"
+msgstr "Ошибки при загрузке!"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
@@ -2851,17 +2849,15 @@ msgstr "Выбрать"
#: editor/editor_export.cpp
msgid "Project export for platform:"
-msgstr ""
+msgstr "ЭкÑпорт проекта Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹:"
#: editor/editor_export.cpp
-#, fuzzy
msgid "Completed with errors."
-msgstr "Завершать пути файлов"
+msgstr "Завершено Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð¼Ð¸."
#: editor/editor_export.cpp
-#, fuzzy
msgid "Completed successfully."
-msgstr "Пакет уÑпешно уÑтановлен!"
+msgstr "Завершено без ошибок."
#: editor/editor_export.cpp
#, fuzzy
@@ -2881,9 +2877,8 @@ msgid "Packing"
msgstr "Упаковывание"
#: editor/editor_export.cpp
-#, fuzzy
msgid "Save PCK"
-msgstr "Сохранить как"
+msgstr "Сохранить PCK"
#: editor/editor_export.cpp
#, fuzzy
@@ -2910,16 +2905,16 @@ msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
msgstr ""
-"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует Ñжатие текÑтур «ETC» Ð´Ð»Ñ GLES2. Включите «Import "
-"Etc» в ÐаÑтройках проекта."
+"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует Ñжатие текÑтур «ETC» Ð´Ð»Ñ GLES2. Включите "
+"«Импортировать Etc» в ÐаÑтройках Проекта."
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC2' texture compression for GLES3. Enable "
"'Import Etc 2' in Project Settings."
msgstr ""
-"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует компреÑÑию текÑтур «ETC2» Ð´Ð»Ñ GLES2. Включите "
-"«Import Etc 2» в ÐаÑтройках проекта."
+"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует компреÑÑию текÑтур «ETC2» Ð´Ð»Ñ GLES3. Включите "
+"«Импортировать Etc 2» в ÐаÑтройках Проекта."
#: editor/editor_export.cpp
msgid ""
@@ -2929,8 +2924,8 @@ msgid ""
"Enabled'."
msgstr ""
"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует ÑÐ¶Ð°Ñ‚Ð¸Ñ Ñ‚ÐµÐºÑтур «ETC» Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ°Ñ‚Ð° драйвера к GLES2.\n"
-"Включите «Import Etc» в ÐаÑтройках проекта или отключите «Driver Fallback "
-"Enabled»."
+"Включите «Импортировать Etc» в ÐаÑтройках проекта или отключите «Driver "
+"Fallback Enabled»."
#: editor/editor_export.cpp
msgid ""
@@ -2946,7 +2941,8 @@ msgid ""
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует компреÑÑию текÑтур «ETC2» или «PVRTC» Ð´Ð»Ñ GLES3. "
-"Включите «Import Etc 2» или «Import Pvrtc» в ÐаÑтройках проекта."
+"Включите «Импортировать Etc 2» или «Импортировать Pvrtc» в ÐаÑтройках "
+"Проекта."
#: editor/editor_export.cpp
msgid ""
@@ -5604,6 +5600,10 @@ msgid "Drag And Drop Selection"
msgstr "Выделение Ñетки"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Внешний вид"
@@ -7257,12 +7257,17 @@ msgid ""
"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
"texture compression to reduce memory usage (blue channel is discarded)."
msgstr ""
+"%s: Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñ‚ÐµÐºÑтура иÑпользуетÑÑ ÐºÐ°Ðº карта нормалей в 3D. Включено краÑно-"
+"зелёное Ñжатие текÑтуры Ð´Ð»Ñ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼Ñти (Ñиний канал "
+"отбраÑываетÑÑ)."
#: editor/import/resource_importer_texture.cpp
msgid ""
"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
"generation and VRAM texture compression."
msgstr ""
+"%s: ТекÑтура иÑпользуетÑÑ Ð² 3D. Включена фильтрациÑ, повторение и Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ "
+"mipmap-карт, а также VRAM Ñжатие текÑтуры."
#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
@@ -11699,6 +11704,11 @@ msgid "New Animation"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Фильтр методов"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "СкороÑть:"
@@ -15361,7 +15371,7 @@ msgstr "Сделать локальным"
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
msgid "Another node already uses this unique name in the scene."
-msgstr "Ð˜Ð¼Ñ ÑƒÐ·Ð»Ð° уже иÑпользовано в Ñцене"
+msgstr "Данное уникальное Ð¸Ð¼Ñ ÑƒÐ¶Ðµ иÑпользовано у другого узла в Ñцене."
#: editor/scene_tree_dock.cpp
msgid "Enable Scene Unique Name"
@@ -15794,9 +15804,8 @@ msgid "Attach Node Script"
msgstr "Прикрепить Ñкрипт"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "Удаленный "
+msgstr "Удаленный %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16774,7 +16783,7 @@ msgstr "Выключен GDNative Ñинглтон"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
#, fuzzy
msgid "Libraries:"
-msgstr "Библиотеки: "
+msgstr "Библиотеки:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -17050,7 +17059,7 @@ msgstr "СфокуÑироватьÑÑ Ð½Ð° начале координат"
#: modules/gltf/gltf_skin.cpp
msgid "Inverse Binds"
-msgstr ""
+msgstr "Инвертировать СвÑзи"
#: modules/gltf/gltf_skin.cpp
#, fuzzy
@@ -17059,11 +17068,11 @@ msgstr "Передвинуть ÑуÑтав"
#: modules/gltf/gltf_skin.cpp
msgid "Joint I To Bone I"
-msgstr ""
+msgstr "Узел I к КоÑти I"
#: modules/gltf/gltf_skin.cpp
msgid "Joint I To Name"
-msgstr ""
+msgstr "Узел I К Имени"
#: modules/gltf/gltf_skin.cpp
msgid "Godot Skin"
@@ -17079,7 +17088,7 @@ msgstr "Диффузный фактор"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Gloss Factor"
-msgstr ""
+msgstr "КоÑфф. ГлÑнца"
#: modules/gltf/gltf_spec_gloss.cpp
#, fuzzy
@@ -17628,9 +17637,8 @@ msgstr ""
"памÑти! ИÑправьте узел пожалуйÑта."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "Узел вернул ошибочную поÑледовательноÑть: "
+msgstr "Узел вернул ошибочный вывод поÑледовательноÑти:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -17640,7 +17648,7 @@ msgstr ""
#: modules/visual_script/visual_script.cpp
#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "Переполнение Ñтека Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ð¾Ð¹ Ñтека: "
+msgstr "Переполнение Ñтека Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ð¾Ð¹ Ñтека:"
#: modules/visual_script/visual_script.cpp
msgid "Visual Script"
@@ -18009,7 +18017,7 @@ msgstr "Ð´Ð»Ñ (Ñлемент) в (вход):"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Input type not iterable:"
-msgstr "Входной тип не итерируемый: "
+msgstr "Входной тип не итерируемый:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
@@ -18018,7 +18026,7 @@ msgstr "Итератор Ñтал недейÑтвительным"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Iterator became invalid:"
-msgstr "Итератор Ñтал недейÑтвительным: "
+msgstr "Итератор Ñтал недейÑтвительным:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -18172,14 +18180,12 @@ msgid "Operator"
msgstr "Оператор"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": ÐедопуÑтимый аргумент типа: "
+msgstr "ÐедопуÑтимый аргумент типа:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": ÐедопуÑтимые аргументы: "
+msgstr "ÐедопуÑтимые аргументы:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18190,14 +18196,13 @@ msgid "Var Name"
msgstr "Ð˜Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "VariableGet не найден в Ñкрипте: "
+msgstr "VariableGet отÑутÑтвует в Ñкрипте:"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "VariableSet не найден в Ñкрипте: "
+msgstr "VariableSet не найден в Ñкрипте:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Preload"
@@ -18334,7 +18339,7 @@ msgstr "Режим запиÑи"
#: modules/webrtc/webrtc_data_channel.h
msgid "WebRTC"
-msgstr ""
+msgstr "WebRTC"
#: modules/webrtc/webrtc_data_channel.h
#, fuzzy
@@ -18350,36 +18355,32 @@ msgid "Trusted SSL Certificate"
msgstr "Доверенный SSL-Ñертификат"
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "WebSocket Client"
-msgstr "Сетевой узел"
+msgstr "Клиент WebSocket"
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "Max In Buffer (KB)"
-msgstr "МакÑимальный размер (КБ)"
+msgstr "МакÑимальный Входной Буфер (КБ)"
#: modules/websocket/websocket_macros.h
msgid "Max In Packets"
-msgstr ""
+msgstr "МакÑимальные ВходÑщие Пакеты"
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "Max Out Buffer (KB)"
-msgstr "МакÑимальный размер (КБ)"
+msgstr "МакÑимальный Буфер Вывода (КБ)"
#: modules/websocket/websocket_macros.h
msgid "Max Out Packets"
-msgstr ""
+msgstr "МакÑимальный Вывод Пакетов"
#: modules/websocket/websocket_macros.h
-#, fuzzy
msgid "WebSocket Server"
-msgstr "Сетевой узел"
+msgstr "Сервер WebSocket"
#: modules/websocket/websocket_server.cpp
msgid "Bind IP"
-msgstr ""
+msgstr "ПривÑзать IP"
#: modules/websocket/websocket_server.cpp
msgid "Private Key"
@@ -18403,14 +18404,12 @@ msgid "Session Mode"
msgstr "Режим ÑеÑÑии"
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "Required Features"
-msgstr "Ðеобходимые функции"
+msgstr "Ðеобходимые Компоненты"
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "Optional Features"
-msgstr "Дополнительные функции"
+msgstr "Дополнительные Компоненты"
#: modules/webxr/webxr_interface.cpp
msgid "Requested Reference Space Types"
@@ -18421,9 +18420,8 @@ msgid "Reference Space Type"
msgstr ""
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "Visibility State"
-msgstr "Переключить видимоÑть"
+msgstr "ВидимоÑть"
#: modules/webxr/webxr_interface.cpp
#, fuzzy
@@ -18431,9 +18429,8 @@ msgid "Bounds Geometry"
msgstr "Повторить"
#: modules/webxr/webxr_interface.cpp
-#, fuzzy
msgid "XR Standard Mapping"
-msgstr "Ð˜Ð½Ñ‚ÐµÐ»Ð»ÐµÐºÑ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка"
+msgstr "Стандартный Маппинг XR"
#: platform/android/export/export.cpp
msgid "Android SDK Path"
@@ -18462,19 +18459,19 @@ msgstr "Выключение ADB при выходе"
#: platform/android/export/export_plugin.cpp
msgid "Launcher Icons"
-msgstr ""
+msgstr "Иконки Лаунчера"
#: platform/android/export/export_plugin.cpp
msgid "Main 192 X 192"
-msgstr ""
+msgstr "ОÑÐ½Ð¾Ð²Ð½Ð°Ñ 192 X 192"
#: platform/android/export/export_plugin.cpp
msgid "Adaptive Foreground 432 X 432"
-msgstr ""
+msgstr "Ðдаптивный Передний Фон 432 X 432"
#: platform/android/export/export_plugin.cpp
msgid "Adaptive Background 432 X 432"
-msgstr ""
+msgstr "Ðдаптивный Задний Фон 432 X 432"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -18501,39 +18498,32 @@ msgid "The package must have at least one '.' separator."
msgstr "Пакет должен иметь Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один разделитель «.»."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Custom Build"
-msgstr "ИÑпользовать ÑобÑтвенную директорию данных пользователÑ"
+msgstr "ÐаÑÑ‚Ñ€Ð°Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¡Ð±Ð¾Ñ€ÐºÐ°"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Use Custom Build"
-msgstr "ИÑпользовать ÑобÑтвенную директорию данных пользователÑ"
+msgstr "ИÑпользовать ÐаÑтраиваемую Сборку"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Export Format"
-msgstr "Путь ÑкÑпорта"
+msgstr "Формат ЭкÑпорта"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Min SDK"
-msgstr "Минимальный размер"
+msgstr "Min SDK"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Target SDK"
-msgstr "Целевой FPS"
+msgstr "Целевой SDK"
#: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp
-#, fuzzy
msgid "Architectures"
-msgstr "Добавить поле архитектуры"
+msgstr "Ðрхитектуры"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Keystore"
-msgstr "Отладочное хранилище ключей"
+msgstr "Хранилище ключей"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18557,31 +18547,27 @@ msgstr "Пароль"
#: platform/android/export/export_plugin.cpp
msgid "One Click Deploy"
-msgstr ""
+msgstr "Развёртывание в Один Клик"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Clear Previous Install"
-msgstr "ОÑмотреть предыдущий ÑкземплÑÑ€"
+msgstr "ОчиÑтить Предыдущую УÑтановку"
#: platform/android/export/export_plugin.cpp
msgid "Code"
msgstr "Код"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
-#, fuzzy
msgid "Package"
-msgstr "Упаковывание"
+msgstr "Пакет"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
-#, fuzzy
msgid "Unique Name"
-msgstr "Уникальные имена"
+msgstr "Уникальное ИмÑ"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signed"
-msgstr "Сигнал"
+msgstr "ПодпиÑано"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18891,14 +18877,12 @@ msgid "Code Signing"
msgstr "ПодпиÑÑŒ кода DMG"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"'apksigner' could not be found. Please check that the command is available "
"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"Ðе удалоÑÑŒ найти команду «apksigner».\n"
-"ПожалуйÑта, проверьте наличие программы в каталоге Android SDK build-tools.\n"
-"Результат %s не подпиÑан."
+"Ðе удалоÑÑŒ найти «apksigner». ПожалуйÑта, убедитеÑÑŒ в наличии команды в "
+"каталоге build-tools Android SDK. Результирующий %s не подпиÑан."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -18913,9 +18897,8 @@ msgid "Could not find keystore, unable to export."
msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not start apksigner executable."
-msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!"
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить иÑполнÑемый файл apksigner."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
@@ -18946,9 +18929,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Ðеверное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°! Android APK требует раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ *.apk."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Unsupported export format!"
-msgstr "Ðеподдерживаемый формат ÑкÑпорта!\n"
+msgstr "Ðеподдерживаемый формат ÑкÑпорта!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -18959,15 +18941,12 @@ msgstr ""
"не ÑущеÑтвует. ПожалуйÑта, переуÑтановите из меню «Проект»."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"ÐеÑоответÑтвие верÑии Ñборки Android:\n"
-" УÑтановлен шаблон: %s\n"
-" ВерÑÐ¸Ñ Godot: %s\n"
-"ПожалуйÑта, переуÑтановите шаблон Ñборки Android из меню «Проект»."
+"ÐеÑоответÑтвие верÑии Ñборки Android: УÑтановлен шаблон: %s, верÑÐ¸Ñ Godot: "
+"%s. ПожалуйÑта, переуÑтановите шаблон Ñборки Android из меню «Проект»."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18977,9 +18956,8 @@ msgstr ""
"Ðевозможно перезапиÑать файлы res://android/build/res/*.xml Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ проекта"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files to gradle project."
-msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle\n"
+msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18990,14 +18968,13 @@ msgid "Building Android Project (gradle)"
msgstr "Сборка проекта Android (gradle)"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"Сборка проекта Android не удалаÑÑŒ, проверьте вывод на ошибки.\n"
-"Также поÑетите docs.godotengine.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸ по Ñборке "
-"Android."
+"Сборка Android проекта не удалаÑÑŒ, проверьте вывод на ошибки. Ð’Ñ‹ также "
+"можете поÑетить docs.godotengine.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸ по Ñборке "
+"Ð´Ð»Ñ Android."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
@@ -19021,22 +18998,18 @@ msgid "Creating APK..."
msgstr "Создание APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find template APK to export: \"%s\"."
-msgstr ""
-"Ðе удалоÑÑŒ найти шаблон APK Ð´Ð»Ñ ÑкÑпорта:\n"
-"%s"
+msgstr "Ðе удалоÑÑŒ найти шаблон APK Ð´Ð»Ñ ÑкÑпорта: \"%s\"."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
-"Ð’ шаблоне ÑкÑпорта отÑутÑтвуют библиотеки Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… архитектур: %s.\n"
-"ПожалуйÑта, Ñоздайте шаблон Ñо вÑеми необходимыми библиотеками или Ñнимите "
-"флажки Ñ Ð¾Ñ‚ÑутÑтвующих архитектур в преÑете ÑкÑпорта."
+"Ð’ шаблоне ÑкÑпорта отÑутÑтвуют библиотеки Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… архитектур: %s. "
+"ПожалуйÑта, поÑтройте шаблон Ñо вÑеми необходимыми библиотеками или Ñнимите "
+"флажки Ñ Ð¾Ñ‚ÑутÑтвующих архитектур в предуÑтановках ÑкÑпорта."
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
@@ -19726,9 +19699,8 @@ msgid "Could not open icon file \"%s\"."
msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Could not start xcrun executable."
-msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!"
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить иÑполнÑемый файл xcrun."
#: platform/osx/export/export.cpp
#, fuzzy
@@ -19812,9 +19784,8 @@ msgid "DMG Creation"
msgstr "Ðаправление"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Could not start hdiutil executable."
-msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!"
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить иÑполнÑемый файл hdiutil."
#: platform/osx/export/export.cpp
msgid "`hdiutil create` failed - file exists."
@@ -19901,9 +19872,8 @@ msgid "ZIP Creation"
msgstr "ПроекциÑ"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Could not open file to read from path \"%s\"."
-msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle\n"
+msgstr "Ðе удалоÑÑŒ открыть файл Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¿Ð¾ пути \"%s\"."
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
@@ -22940,11 +22910,11 @@ msgstr ""
#: scene/3d/physics_body.cpp
msgid "Angular Spring Damping"
-msgstr ""
+msgstr "Угловое Затухание Пружины"
#: scene/3d/physics_body.cpp
msgid "Angular Equilibrium Point"
-msgstr ""
+msgstr "Ð£Ð³Ð»Ð¾Ð²Ð°Ñ Ð¢Ð¾Ñ‡ÐºÐ° РавновеÑиÑ"
#: scene/3d/physics_body.cpp
#, fuzzy
@@ -22973,7 +22943,7 @@ msgstr "Узел Ри Узел В должны быть различными о
#: scene/3d/physics_joint.cpp
msgid "Solver"
-msgstr ""
+msgstr "Разрешитель"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -22987,7 +22957,7 @@ msgstr "Параметры"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit"
-msgstr ""
+msgstr "Угловой Предел"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23001,7 +22971,7 @@ msgstr "нижний региÑтр"
#: scene/3d/physics_joint.cpp
msgid "Motor"
-msgstr ""
+msgstr "Мотор"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23085,11 +23055,11 @@ msgstr "МежÑтрочный интервал"
#: scene/3d/physics_joint.cpp
msgid "Equilibrium Point"
-msgstr ""
+msgstr "Точка РавновеÑиÑ"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit X"
-msgstr ""
+msgstr "X Углового Предела"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23098,7 +23068,7 @@ msgstr "Ð£Ð³Ð»Ð¾Ð²Ð°Ñ ÑкороÑть"
#: scene/3d/physics_joint.cpp
msgid "Angular Spring X"
-msgstr ""
+msgstr "X Угловой Пружины"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23117,7 +23087,7 @@ msgstr "МежÑтрочный интервал"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit Y"
-msgstr ""
+msgstr "Y Углового Предела"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23126,7 +23096,7 @@ msgstr "Ð£Ð³Ð»Ð¾Ð²Ð°Ñ ÑкороÑть"
#: scene/3d/physics_joint.cpp
msgid "Angular Spring Y"
-msgstr ""
+msgstr "Y Угловой Пружины"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23145,7 +23115,7 @@ msgstr "МежÑтрочный интервал"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit Z"
-msgstr ""
+msgstr "Z Углового Предела"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23154,7 +23124,7 @@ msgstr "Ð£Ð³Ð»Ð¾Ð²Ð°Ñ ÑкороÑть"
#: scene/3d/physics_joint.cpp
msgid "Angular Spring Z"
-msgstr ""
+msgstr "Z Угловой Пружины"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
@@ -23174,7 +23144,7 @@ msgstr "Портал активен"
#: scene/3d/portal.cpp scene/resources/occluder_shape_polygon.cpp
msgid "Two Way"
-msgstr ""
+msgstr "В обе Стороны"
#: scene/3d/portal.cpp
msgid "Linked Room"
@@ -27789,14 +27759,12 @@ msgid "Import S3TC"
msgstr "Импорт"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Import ETC"
-msgstr "Импорт"
+msgstr "Импортировать ETC"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Import ETC2"
-msgstr "Импорт"
+msgstr "Импортировать ETC2"
#: servers/visual_server.cpp
#, fuzzy
diff --git a/editor/translations/si.po b/editor/translations/si.po
index bfba193a6a..e30d6c27ab 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -2120,14 +2120,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2183,8 +2184,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5345,6 +5346,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11392,6 +11397,11 @@ msgid "New Animation"
msgstr "සජීවීකරණ පුනරà·à·€à¶»à·Šà¶®à¶±à¶º"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "à·à·Šâ€à¶»à·’à¶­:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index f711be3039..c3a64ecc2f 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -2204,14 +2204,15 @@ msgstr "Obľúbené:"
msgid "Recent:"
msgstr "Nedávne:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Hľadať:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Zhody:"
@@ -2271,8 +2272,8 @@ msgstr "Hľadať Náhradný Zdroj:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5658,6 +5659,10 @@ msgid "Drag And Drop Selection"
msgstr "Všetky vybrané"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11963,6 +11968,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filter:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index aae6c8ba68..4f7f11baa3 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -2223,14 +2223,15 @@ msgstr "Priljubljene:"
msgid "Recent:"
msgstr "Nedavni:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Iskanje:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Zadetki:"
@@ -2292,8 +2293,8 @@ msgstr "Iskanje Nadomestnih Virov:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5729,6 +5730,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap Izbriši Izbor"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12183,6 +12188,11 @@ msgid "New Animation"
msgstr "Animacija"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Lastnosti objekta."
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index f405b8b8a9..d011c34407 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -2162,14 +2162,15 @@ msgstr "Të Preferuarat:"
msgid "Recent:"
msgstr "Të fundit:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Kërko:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Përputhjet:"
@@ -2231,8 +2232,8 @@ msgstr "Kërko Resursin Zëvendësues:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5665,6 +5666,10 @@ msgid "Drag And Drop Selection"
msgstr "Fshi të Selektuarat"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11886,6 +11891,11 @@ msgid "New Animation"
msgstr "Animacionin i Ri"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Nyjet filtruese"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 9d7c4c5db8..4a9d933004 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -2333,14 +2333,15 @@ msgstr "Омиљене:"
msgid "Recent:"
msgstr "ЧеÑте:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Тражи:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Подударање:"
@@ -2402,8 +2403,8 @@ msgstr "Потражи замену за реÑурÑ:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5978,6 +5979,10 @@ msgid "Drag And Drop Selection"
msgstr "МапаМреже ИÑпуни Одабрано"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12753,6 +12758,11 @@ msgstr "Ðнимација"
#: editor/plugins/sprite_frames_editor_plugin.cpp
#, fuzzy
+msgid "Filter animations"
+msgstr "Филтрирај методе"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
msgid "Speed:"
msgstr "Брзина (FPS):"
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index d3f588aca6..41b23339de 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -2137,14 +2137,15 @@ msgstr "Omiljeno:"
msgid "Recent:"
msgstr "Nedavno:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Pretraga:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Podudaranja:"
@@ -2204,8 +2205,8 @@ msgstr "Traži Resurs Zamene:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5364,6 +5365,10 @@ msgid "Drag And Drop Selection"
msgstr "Sve sekcije"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11398,6 +11403,11 @@ msgid "New Animation"
msgstr "Nova Animacija"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Animacija"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index 08b57d1a25..3baefa6356 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -14,7 +14,7 @@
# Mattias Münster <mattiasmun@gmail.com>, 2019.
# Anonymous <noreply@weblate.org>, 2020.
# Joakim Lundberg <joakim@joakimlundberg.com>, 2020.
-# Kristoffer Grundström <swedishsailfishosuser@tutanota.com>, 2020, 2021.
+# Kristoffer Grundström <swedishsailfishosuser@tutanota.com>, 2020, 2021, 2022.
# Jonas Robertsson <jonas.robertsson@posteo.net>, 2020, 2021.
# André Andersson <andre.eric.andersson@gmail.com>, 2020.
# Andreas Westrell <andreas.westrell@gmail.com>, 2020.
@@ -22,16 +22,18 @@
# Shaggy <anton_christoffersson@hotmail.com>, 2020.
# Marcus Toftedahl <marcus.toftedahl@his.se>, 2020.
# Alex25820 <Alexander_sjogren@hotmail.se>, 2021.
-# Leon <joel.lundborg@gmail.com>, 2021.
+# Leon <joel.lundborg@gmail.com>, 2021, 2022.
# Kent Jofur <kent.jofur@gmail.com>, 2021.
# Alex25820 <alexs25820@gmail.com>, 2021.
+# Björn Åkesson <bjorn.akesson@gmail.com>, 2022.
+# Kenny Andersson <kenny@ordinary.se>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-12-20 18:53+0000\n"
-"Last-Translator: Alex25820 <alexs25820@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: Kenny Andersson <kenny@ordinary.se>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/"
"godot/sv/>\n"
"Language: sv\n"
@@ -39,11 +41,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
+#, fuzzy
msgid "Tablet Driver"
-msgstr ""
+msgstr "Drivrutin för surfplatta"
#: core/bind/core_bind.cpp
#, fuzzy
@@ -51,18 +54,16 @@ msgid "Clipboard"
msgstr "Klippbordet är tomt!"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Current Screen"
-msgstr "Nuvarande Scen"
+msgstr "Nuvarande Skärm"
#: core/bind/core_bind.cpp
msgid "Exit Code"
msgstr ""
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "V-Sync Enabled"
-msgstr "Aktivera"
+msgstr "V-Synk Aktivt"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
@@ -73,9 +74,8 @@ msgid "Delta Smoothing"
msgstr ""
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Low Processor Usage Mode"
-msgstr "Exportera Projekt"
+msgstr "Läge för låg processoranvändning"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode Sleep (µsec)"
@@ -86,9 +86,8 @@ msgid "Keep Screen On"
msgstr ""
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Min Window Size"
-msgstr "Storlek:"
+msgstr "Minsta fönsterstorlek"
#: core/bind/core_bind.cpp
#, fuzzy
@@ -108,11 +107,11 @@ msgstr "Nytt Fönster"
#: core/bind/core_bind.cpp core/project_settings.cpp
msgid "Borderless"
-msgstr ""
+msgstr "Kantlös"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "Genomskinlighet per pixel aktiverad"
#: core/bind/core_bind.cpp core/project_settings.cpp
#, fuzzy
@@ -121,16 +120,16 @@ msgstr "Växla Fullskärm"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "Maximerad"
#: core/bind/core_bind.cpp
msgid "Minimized"
-msgstr ""
+msgstr "Minimerad"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "Anpassningsbar"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
@@ -150,36 +149,32 @@ msgstr "Dockposition"
#: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Size"
-msgstr "Storlek:"
+msgstr "Storlek"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
msgstr ""
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Editor Hint"
-msgstr "Redigera Tema"
+msgstr "Redigeringsförslag"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "Skriv ut felmeddelanden"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Iterations Per Second"
-msgstr "Interpolationsläge"
+msgstr "Upprepningar per sekund"
#: core/bind/core_bind.cpp
msgid "Target FPS"
-msgstr ""
+msgstr "MÃ¥l FPS"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Time Scale"
-msgstr "Skala"
+msgstr "Tidsskala"
#: core/bind/core_bind.cpp main/main.cpp
#, fuzzy
@@ -201,13 +196,12 @@ msgid "Error Line"
msgstr "Fel vid sparande"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Result"
-msgstr "Sök Hjälp"
+msgstr "Resultat"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "Minne"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -218,7 +212,7 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "Begränsningar"
#: core/command_queue_mt.cpp
#, fuzzy
@@ -227,68 +221,63 @@ msgstr "Ctrl: Rotera"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
-msgstr ""
+msgstr "Flertrådsköstorlek (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Funktioner"
+msgstr "Funktion"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
msgid "Data"
-msgstr ""
+msgstr "Data"
#: core/io/file_access_network.cpp core/register_core_types.cpp
#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Network"
-msgstr "Nätverksprofilerare"
+msgstr "Nätverk"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Remote FS"
-msgstr "Ta bort"
+msgstr "Fjärr FS"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Page Size"
-msgstr "Sida: "
+msgstr "Sidstorlek"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
-msgstr ""
+msgstr "Sida läs framåt"
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr ""
+msgstr "Blockeringsläge Aktiverat"
#: core/io/http_client.cpp
-#, fuzzy
msgid "Connection"
-msgstr "Anslut"
+msgstr "Anslutning"
#: core/io/http_client.cpp
msgid "Read Chunk Size"
-msgstr ""
+msgstr "Läs segmentstorlek"
#: core/io/marshalls.cpp
msgid "Object ID"
-msgstr ""
+msgstr "Objekt ID"
#: core/io/multiplayer_api.cpp core/io/packet_peer.cpp
msgid "Allow Object Decoding"
-msgstr ""
+msgstr "Tillåt objekt avkodning"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
msgid "Refuse New Network Connections"
-msgstr ""
+msgstr "Neka nya nätverksanslutningar"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
#, fuzzy
@@ -312,36 +301,35 @@ msgstr "Transformera"
#: core/io/packet_peer.cpp
msgid "Encode Buffer Max Size"
-msgstr ""
+msgstr "Maxstorlek för kodningsbufferten"
#: core/io/packet_peer.cpp
msgid "Input Buffer Max Size"
-msgstr ""
+msgstr "Maximal storlek på inmatningsbufferten"
#: core/io/packet_peer.cpp
msgid "Output Buffer Max Size"
-msgstr ""
+msgstr "Maxstorlek för utgångsbuffert"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
-msgstr ""
+msgstr "Strömningsenhet"
#: core/io/stream_peer.cpp
msgid "Big Endian"
-msgstr ""
+msgstr "Big Endian"
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "Datamatris"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
-msgstr ""
+msgstr "Blockering av handskakning"
#: core/io/udp_server.cpp
-#, fuzzy
msgid "Max Pending Connections"
-msgstr "Redigera Koppling:"
+msgstr "Max väntande anslutningar"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -356,12 +344,11 @@ msgstr "Förväntade en sträng av längden 1 (ett tecken)."
#: modules/mono/glue/gd_glue.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr "Inte nog med bytes för att avkoda, eller ogiltigt format."
+msgstr "Otillräckligt antal bytes för att avkoda, eller ogiltigt format."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Ogiltig indata %i (ej överförd) i uttrycket"
+msgstr "Ogiltig inmatning %d (ej överförd) i uttrycket"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -390,7 +377,7 @@ msgstr "I anrop till '%s':"
#: core/math/random_number_generator.cpp
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Seed"
-msgstr ""
+msgstr "Seed"
#: core/math/random_number_generator.cpp
#, fuzzy
@@ -399,11 +386,11 @@ msgstr "Status"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "Meddelandekö"
#: core/message_queue.cpp
msgid "Max Size (KB)"
-msgstr ""
+msgstr "Maxstorlek (KB)"
#: core/os/input.cpp
#, fuzzy
@@ -412,7 +399,7 @@ msgstr "Växla Läge"
#: core/os/input.cpp
msgid "Use Accumulated Input"
-msgstr ""
+msgstr "Använd ackumulerad input"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
@@ -420,13 +407,12 @@ msgid "Device"
msgstr "Enhet"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Alt"
-msgstr "Alla"
+msgstr "Alt"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: core/os/input_event.cpp
#, fuzzy
@@ -435,7 +421,7 @@ msgstr "Versionshantering"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "Meta"
#: core/os/input_event.cpp
#, fuzzy
@@ -455,9 +441,8 @@ msgid "Pressed"
msgstr "Återställ Zoom"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
-msgstr "Skanna"
+msgstr "Scancode"
#: core/os/input_event.cpp
msgid "Physical Scancode"
@@ -465,7 +450,7 @@ msgstr ""
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
@@ -482,9 +467,8 @@ msgid "Global Position"
msgstr "Konstant"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Factor"
-msgstr "Vektor"
+msgstr "Faktor"
#: core/os/input_event.cpp
#, fuzzy
@@ -493,25 +477,23 @@ msgstr "Automatisk Indentering"
#: core/os/input_event.cpp
msgid "Doubleclick"
-msgstr ""
+msgstr "Dubbelklick"
#: core/os/input_event.cpp
msgid "Tilt"
msgstr ""
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pressure"
-msgstr "Återställ Zoom"
+msgstr "Tryck"
#: core/os/input_event.cpp
msgid "Pen Inverted"
-msgstr ""
+msgstr "Invertera penna"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Relative"
-msgstr "GDNative"
+msgstr "Relativ"
#: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp
@@ -527,9 +509,8 @@ msgid "Axis"
msgstr "Axel"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Axis Value"
-msgstr "Värde"
+msgstr "Axelvärde"
#: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp
#, fuzzy
@@ -545,21 +526,19 @@ msgstr "Åtgärd"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "Styrka"
#: core/os/input_event.cpp
msgid "Delta"
-msgstr ""
+msgstr "Delta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Channel"
-msgstr "Ändra"
+msgstr "Kanal"
#: core/os/input_event.cpp main/main.cpp
-#, fuzzy
msgid "Message"
-msgstr "Synkronisera Skript-ändringar"
+msgstr "Meddelande"
#: core/os/input_event.cpp
#, fuzzy
@@ -570,11 +549,11 @@ msgstr "Växla"
#: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp
#: scene/3d/physics_body.cpp scene/resources/particles_material.cpp
msgid "Velocity"
-msgstr ""
+msgstr "Hastighet"
#: core/os/input_event.cpp
msgid "Instrument"
-msgstr ""
+msgstr "Instrument"
#: core/os/input_event.cpp
#, fuzzy
@@ -588,13 +567,13 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Application"
-msgstr "Åtgärd"
+msgstr "Applikation"
#: core/project_settings.cpp main/main.cpp
+#, fuzzy
msgid "Config"
-msgstr ""
+msgstr "Konfigurera"
#: core/project_settings.cpp
#, fuzzy
@@ -630,7 +609,7 @@ msgstr "Kör"
#: core/project_settings.cpp editor/editor_node.cpp
#: editor/run_settings_dialog.cpp main/main.cpp
msgid "Main Scene"
-msgstr ""
+msgstr "Huvudscen"
#: core/project_settings.cpp
#, fuzzy
@@ -644,15 +623,15 @@ msgstr "Avaktiverad"
#: core/project_settings.cpp
msgid "Use Hidden Project Data Directory"
-msgstr ""
+msgstr "Använda dold projektdatakatalog"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
-msgstr ""
+msgstr "Använd anpassad användarkatalog"
#: core/project_settings.cpp
msgid "Custom User Dir Name"
-msgstr ""
+msgstr "Anpassad användarkatalognamn"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
@@ -665,7 +644,7 @@ msgstr "Ersätt Alla"
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "Bredd"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -673,13 +652,12 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "Höger"
+msgstr "Höjd"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Alltid överst"
#: core/project_settings.cpp
#, fuzzy
@@ -706,11 +684,11 @@ msgstr "Ladda standard Buss-Layouten."
#: editor/editor_settings.cpp editor/script_create_dialog.cpp
#: scene/2d/camera_2d.cpp scene/3d/light.cpp scene/main/node.cpp
msgid "Editor"
-msgstr ""
+msgstr "Redigerare"
#: core/project_settings.cpp
msgid "Main Run Args"
-msgstr ""
+msgstr "Huvudkörnings arg"
#: core/project_settings.cpp
#, fuzzy
@@ -719,11 +697,12 @@ msgstr "Scen Filsökväg:"
#: core/project_settings.cpp
msgid "Search In File Extensions"
-msgstr ""
+msgstr "Sök i filändelser"
#: core/project_settings.cpp
+#, fuzzy
msgid "Script Templates Search Path"
-msgstr ""
+msgstr "Sökväg för skriptmallar"
#: core/project_settings.cpp
#, fuzzy
@@ -738,16 +717,16 @@ msgstr "Versionshantering"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
msgid "Input"
-msgstr ""
+msgstr "Input"
#: core/project_settings.cpp
+#, fuzzy
msgid "UI Accept"
-msgstr ""
+msgstr "UI Acceptera"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Select"
-msgstr "Välj"
+msgstr "Ui Välj"
#: core/project_settings.cpp
#, fuzzy
@@ -779,9 +758,8 @@ msgid "UI Up"
msgstr ""
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Down"
-msgstr "Ladda ner"
+msgstr "UI Ner"
#: core/project_settings.cpp
#, fuzzy
@@ -790,11 +768,11 @@ msgstr "Sida: "
#: core/project_settings.cpp
msgid "UI Page Down"
-msgstr ""
+msgstr "UI sida ner"
#: core/project_settings.cpp
msgid "UI Home"
-msgstr ""
+msgstr "UI hem"
#: core/project_settings.cpp
msgid "UI End"
@@ -931,7 +909,7 @@ msgstr ""
#: core/register_core_types.cpp
msgid "TCP"
-msgstr ""
+msgstr "TCP"
#: core/register_core_types.cpp
#, fuzzy
@@ -944,11 +922,12 @@ msgstr ""
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
-msgstr ""
+msgstr "Max buffer (2 potenser)"
#: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp
+#, fuzzy
msgid "SSL"
-msgstr ""
+msgstr "SSL"
#: core/register_core_types.cpp main/main.cpp
#, fuzzy
@@ -964,7 +943,7 @@ msgstr "Resurs"
#: core/resource.cpp
#, fuzzy
msgid "Local To Scene"
-msgstr "Stäng Scen"
+msgstr "Lokalt till scenen"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp
@@ -983,12 +962,13 @@ msgid "Locale"
msgstr ""
#: core/translation.cpp
+#, fuzzy
msgid "Test"
-msgstr ""
+msgstr "Test"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr ""
+msgstr "Reserv"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -1023,18 +1003,21 @@ msgstr "EiB"
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp
+#, fuzzy
msgid "Buffers"
-msgstr ""
+msgstr "Buffertar"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
+#, fuzzy
msgid "Canvas Polygon Buffer Size (KB)"
-msgstr ""
+msgstr "Buffertstorlek för canvaspolygon (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
+#, fuzzy
msgid "Canvas Polygon Index Buffer Size (KB)"
-msgstr ""
+msgstr "Buffertstorlek för Canvas Polygon Index (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp
@@ -1045,8 +1028,9 @@ msgstr ""
#: servers/physics_2d/physics_2d_server_wrap_mt.h
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
+#, fuzzy
msgid "2D"
-msgstr ""
+msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -1057,42 +1041,47 @@ msgstr "Alternativ"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Use GPU Pixel Snap"
-msgstr ""
+msgstr "Använd GPU pixel vidhäftning"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
+#, fuzzy
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "Omedelbar buffertstorlek (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
+#, fuzzy
msgid "Lightmapping"
-msgstr ""
+msgstr "Ljusmappning"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
+#, fuzzy
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "Använd bikubisk sampling"
#: drivers/gles3/rasterizer_scene_gles3.cpp
+#, fuzzy
msgid "Max Renderable Elements"
-msgstr ""
+msgstr "Max återgivningsbara element"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
-msgstr ""
+msgstr "Max renderbara ljuskällor"
#: drivers/gles3/rasterizer_scene_gles3.cpp
+#, fuzzy
msgid "Max Renderable Reflections"
-msgstr ""
+msgstr "Max renderingsbara reflektioner"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "Max antal ljuskällor per objekt"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
-msgstr ""
+msgstr "Subsurface Scattering"
#: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1116,16 +1105,19 @@ msgid "Weight Samples"
msgstr ""
#: drivers/gles3/rasterizer_scene_gles3.cpp
+#, fuzzy
msgid "Voxel Cone Tracing"
-msgstr ""
+msgstr "Voxel Kon Spårning"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
+#, fuzzy
msgid "High Quality"
-msgstr ""
+msgstr "Hög kvalitet"
#: drivers/gles3/rasterizer_storage_gles3.cpp
+#, fuzzy
msgid "Blend Shape Max Buffer Size (KB)"
-msgstr ""
+msgstr "Mixform Max buffertstorlek (KB)"
#. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror).
#: editor/animation_bezier_editor.cpp
@@ -1178,7 +1170,7 @@ msgstr "Anim Ta Bort Nycklar"
#: editor/animation_track_editor.cpp
msgid "Anim Change Keyframe Time"
-msgstr "Anim Ändra Nyckelbildstid"
+msgstr "Anim Ändra Tidsnyckelns Tid"
#: editor/animation_track_editor.cpp
msgid "Anim Change Transition"
@@ -1236,7 +1228,7 @@ msgstr "Välj Färg"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "Argument"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
@@ -1247,23 +1239,25 @@ msgstr "Typ"
#: editor/animation_track_editor.cpp
msgid "In Handle"
-msgstr ""
+msgstr "Handtag in"
#: editor/animation_track_editor.cpp
+#, fuzzy
msgid "Out Handle"
-msgstr ""
+msgstr "Handtag ut"
#: editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
+#, fuzzy
msgid "Stream"
-msgstr ""
+msgstr "Ström"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Start Offset"
-msgstr "Icon Läge"
+msgstr "Startförskjutning"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1282,7 +1276,7 @@ msgstr "Animation"
#: editor/animation_track_editor.cpp
msgid "Easing"
-msgstr ""
+msgstr "Lätta"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Time"
@@ -1435,7 +1429,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Out-Handle:"
-msgstr ""
+msgstr "Handtag ut:"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1448,8 +1442,9 @@ msgid "Start (s):"
msgstr "Starta"
#: editor/animation_track_editor.cpp
+#, fuzzy
msgid "End (s):"
-msgstr ""
+msgstr "Slut (s):"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1509,7 +1504,7 @@ msgstr "Duplicera Nycklar"
#: editor/animation_track_editor.cpp
msgid "Add RESET Value(s)"
-msgstr ""
+msgstr "Lägg till RESET-värde(n)"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -1591,7 +1586,7 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "property '%s'"
-msgstr "egenskapen '%s'"
+msgstr "egenskap '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1824,9 +1819,8 @@ msgid "Go to Previous Step"
msgstr "Gå till Föregående Steg"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Återställ Zoom"
+msgstr "Verkställ återställning"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -2209,14 +2203,15 @@ msgstr "Favoriter:"
msgid "Recent:"
msgstr "Senaste:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Sök:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Matchar:"
@@ -2276,8 +2271,8 @@ msgstr "Sök Ersättningsresurs:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2286,17 +2281,17 @@ msgstr "Öppna"
#: editor/dependency_editor.cpp
msgid "Owners of: %s (Total: %d)"
-msgstr ""
+msgstr "Ägare av: %s (Totalt: %d)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Ta bort valda filer från projektet? (Kan ej återställas)\n"
-"Du kan hitta de borttagna filerna i systemets papperskorg."
+"Ta bort de valda filerna från projektet? (Kan ej ångras.)\n"
+"Beroende på hur ditt filsystem är konfigurerat så kommer filerna antingen "
+"flyttas till systemets papperskorg eller tas bort permanent."
#: editor/dependency_editor.cpp
msgid ""
@@ -2381,7 +2376,7 @@ msgstr "Tack från Godot-gemenskapen!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr "Klicka för att kopiera."
+msgstr "Klicka för att kopiera"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -2479,30 +2474,32 @@ msgid "Licenses"
msgstr "Licenser"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Fel vid öppning av paketetfil, inte i zip-format."
+msgstr "Fel vid öppning av tillgångsfilen för \"%s\" (inte i ZIP-format)."
#: editor/editor_asset_installer.cpp
msgid "%s (already exists)"
msgstr "%s (existerar redan)"
#: editor/editor_asset_installer.cpp
+#, fuzzy
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
+"Innehållet i resursen \"%s\" - %d fil(er) står i konflikt med ditt projekt:"
#: editor/editor_asset_installer.cpp
+#, fuzzy
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Innehållet i resursen \"%s\" - Inga filer står i konflikt med ditt projekt:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Dekomprimerar Tillgångar"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Följande filer misslyckades att packas upp från paketet:"
+msgstr "Följande filer misslyckades att packas upp från paketet \"%s\":"
#: editor/editor_asset_installer.cpp
msgid "(and %s more files)"
@@ -2510,7 +2507,7 @@ msgstr "(och %s fler filer)"
#: editor/editor_asset_installer.cpp
msgid "Asset \"%s\" installed successfully!"
-msgstr "Paketet \"%s\" har installerats!"
+msgstr "Installation av tillgången \"%s\" lyckades!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -2522,9 +2519,8 @@ msgid "Install"
msgstr "Installera"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "Paketinstallerare"
+msgstr "Tillgångsinstallerare"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -2705,8 +2701,9 @@ msgid "Invalid name."
msgstr "Ogiltigt namn."
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Kan inte börja med en siffra."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2771,7 +2768,7 @@ msgstr "%s är en ogiltig genväg. Filen existerar inte."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s är en ogiltig genväg. Inte i resurs-genväg (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -2851,7 +2848,7 @@ msgstr "Välj"
#: editor/editor_export.cpp
msgid "Project export for platform:"
-msgstr ""
+msgstr "Projektexport för plattformen:"
#: editor/editor_export.cpp
#, fuzzy
@@ -2938,8 +2935,8 @@ msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"Målplattformen kräver 'PVRTC'-texturkomprimering för GLES2. Aktivera 'Import "
-"Pvrtc' i projektinställningarna."
+"Målplattformen kräver 'PVRTC' texturkomprimering för GLES2. Aktivera "
+"'Importera Pvrtc' i Projektinställningarna."
#: editor/editor_export.cpp
msgid ""
@@ -2971,7 +2968,7 @@ msgstr "Redigera Tema"
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/export/export.cpp
msgid "Release"
-msgstr ""
+msgstr "Släpp"
#: editor/editor_export.cpp
#, fuzzy
@@ -2980,11 +2977,12 @@ msgstr "Färg enhetlig."
#: editor/editor_export.cpp
msgid "64 Bits"
-msgstr ""
+msgstr "64 bitar"
#: editor/editor_export.cpp
+#, fuzzy
msgid "Embed PCK"
-msgstr ""
+msgstr "Bädda in PCK"
#: editor/editor_export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -3046,7 +3044,7 @@ msgstr "Hantera exportmallar..."
#: editor/editor_export.cpp platform/windows/export/export.cpp
#: platform/x11/export/export.cpp
msgid "PCK Embedding"
-msgstr ""
+msgstr "PCK Inbäddning"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3054,7 +3052,7 @@ msgstr "Den inbäddade PCK får inte vara större än 4 GiB på 32 bitars export
#: editor/editor_export.cpp
msgid "Convert Text Resources To Binary On Export"
-msgstr ""
+msgstr "Konvertera textresurser till binära vid export"
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
@@ -3083,9 +3081,8 @@ msgid "FileSystem Dock"
msgstr "FilSystem"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Import Dock"
-msgstr "Importera"
+msgstr "Importera Brygga"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
@@ -3097,17 +3094,19 @@ msgstr "Tillåter att redigera skript via den integrerade skript-redigeraren."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Ger inbyggd tillgång till tillgångsbiblioteket."
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Tillåter redigering av nodhierarkin i scendockan."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Tillåter arbete med signaler och grupper av noden som valts i Scendockan."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
@@ -3145,19 +3144,16 @@ msgid "(Editor Disabled, Properties Disabled)"
msgstr "(Editor inaktiverad, Egenskaper inaktiverad)"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(Properties Disabled)"
-msgstr "Egenskaper"
+msgstr "(Egenskaper avstängda)"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(Editor Disabled)"
-msgstr "Redigera Variabel"
+msgstr "(Redigeraren är avstängd)"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Options:"
-msgstr "Beskrivning:"
+msgstr "Klassalternativ:"
#: editor/editor_feature_profile.cpp
msgid "Enable Contextual Editor"
@@ -3194,9 +3190,8 @@ msgid "Error saving profile to path: '%s'."
msgstr "Fel vid laddning av mall '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "Ladda Standard"
+msgstr "Återställ till Standard"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
@@ -3249,18 +3244,16 @@ msgid "Create or import a profile to edit available classes and properties."
msgstr ""
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "New profile name:"
-msgstr "Nytt namn:"
+msgstr "Nytt profilnamn:"
#: editor/editor_feature_profile.cpp
msgid "Godot Feature Profile"
msgstr "Godot funktions profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Import Profile(s)"
-msgstr "%d fler filer"
+msgstr "Importera profil(er)"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -3294,9 +3287,8 @@ msgid "Copy Path"
msgstr "Kopiera Sökväg"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
-#, fuzzy
msgid "Open in File Manager"
-msgstr "Visa I Filhanteraren"
+msgstr "Öppna i filhanteraren"
#: editor/editor_file_dialog.cpp editor/editor_node.cpp
#: editor/filesystem_dock.cpp editor/project_manager.cpp
@@ -5556,7 +5548,7 @@ msgstr "Miniatyr..."
#: editor/editor_settings.cpp
msgid "Docks"
-msgstr ""
+msgstr "Anslutningar"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5674,6 +5666,10 @@ msgid "Drag And Drop Selection"
msgstr "Alla urval"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11301,7 +11297,7 @@ msgstr "Spela"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr ""
+msgstr "Ortogonal"
#: editor/plugins/spatial_editor_plugin.cpp modules/gltf/gltf_camera.cpp
msgid "Perspective"
@@ -11468,7 +11464,7 @@ msgstr "Partiklar"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -12049,6 +12045,11 @@ msgid "New Animation"
msgstr "Animation"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Filtrera noder"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
@@ -24738,8 +24739,9 @@ msgid "Alpha"
msgstr ""
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#, fuzzy
msgid "Caret"
-msgstr ""
+msgstr "Markör"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Blink"
@@ -25397,9 +25399,8 @@ msgid "Draw 2D Outlines"
msgstr ""
#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Reflections"
-msgstr "Riktningar"
+msgstr "Reflektioner"
#: scene/main/scene_tree.cpp
msgid "Atlas Size"
@@ -28332,12 +28333,13 @@ msgid "UV Contract Amount"
msgstr ""
#: servers/visual_server.cpp
+#, fuzzy
msgid "Use Simple PVS"
-msgstr ""
+msgstr "Använd enkel PVS"
#: servers/visual_server.cpp
msgid "PVS Logging"
-msgstr ""
+msgstr "PVS loggning"
#: servers/visual_server.cpp
#, fuzzy
@@ -28350,8 +28352,9 @@ msgid "Remove Danglers"
msgstr "Ta Bort Mall"
#: servers/visual_server.cpp
+#, fuzzy
msgid "Flip Imported Portals"
-msgstr ""
+msgstr "Vänd importerade portaler"
#: servers/visual_server.cpp
#, fuzzy
@@ -28359,8 +28362,9 @@ msgid "Occlusion Culling"
msgstr "Redigera Polygon"
#: servers/visual_server.cpp
+#, fuzzy
msgid "Max Active Spheres"
-msgstr ""
+msgstr "Max aktiva sfärer"
#: servers/visual_server.cpp
#, fuzzy
@@ -28373,13 +28377,15 @@ msgid "Shader Compilation Mode"
msgstr "Interpolationsläge"
#: servers/visual_server.cpp
+#, fuzzy
msgid "Max Simultaneous Compiles"
-msgstr ""
+msgstr "Max samtidiga kompileringar"
#: servers/visual_server.cpp
msgid "Log Active Async Compiles Count"
msgstr ""
#: servers/visual_server.cpp
+#, fuzzy
msgid "Shader Cache Size (MB)"
-msgstr ""
+msgstr "Shader Cache Storlek (MB)"
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 98eb54ce5c..03919233f7 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -2074,14 +2074,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2137,8 +2138,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5271,6 +5272,10 @@ msgid "Drag And Drop Selection"
msgstr ""
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11232,6 +11237,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "గణనలà±"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 9460318ef8..1690916a54 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -2223,14 +2223,15 @@ msgstr "ที่ชื่นชอบ:"
msgid "Recent:"
msgstr "ล่าสุด:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "ค้นหา:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "พบ:"
@@ -2291,8 +2292,8 @@ msgstr "ค้นหาทรัพยาà¸à¸£à¸¡à¸²à¹à¸—นที่:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5653,6 +5654,10 @@ msgid "Drag And Drop Selection"
msgstr "เติมที่เลือà¸à¹ƒà¸™ GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11947,6 +11952,11 @@ msgid "New Animation"
msgstr "à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¹ƒà¸«à¸¡à¹ˆ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "วิธีà¸à¸²à¸£à¸à¸£à¸­à¸‡"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "ความเร็ว:"
diff --git a/editor/translations/tl.po b/editor/translations/tl.po
index a7a9bacaeb..cc20958dd1 100644
--- a/editor/translations/tl.po
+++ b/editor/translations/tl.po
@@ -2175,14 +2175,15 @@ msgstr "Mga Paborito:"
msgid "Recent:"
msgstr "Kamakailan:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Maghanap:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Mga Tugma:"
@@ -2242,8 +2243,8 @@ msgstr "Maghanap ng Pangpalit na Resource:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5467,6 +5468,10 @@ msgid "Drag And Drop Selection"
msgstr "Kopyahin Ang Pinagpipilian"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11573,6 +11578,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Salain ang mga method"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Bilis:"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 3cbd52b7e4..4980240671 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -74,13 +74,16 @@
# Ramazan Aslan <legendraslan@gmail.com>, 2022.
# paledega <paledega@yandex.ru>, 2022.
# Yekez <yasintonge@gmail.com>, 2022.
+# Deleted User <noreply+46833@weblate.org>, 2022.
+# Emre <mr.inkaya@gmail.com>, 2022.
+# Deleted User <noreply+46858@weblate.org>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-03 00:44+0000\n"
-"Last-Translator: Yekez <yasintonge@gmail.com>\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
+"Last-Translator: Deleted User <noreply+46858@weblate.org>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -88,7 +91,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -333,15 +336,15 @@ msgstr "Transfer Modu"
#: core/io/packet_peer.cpp
msgid "Encode Buffer Max Size"
-msgstr ""
+msgstr "Kodlama ArabelleÄŸi Maksimum Boyutu"
#: core/io/packet_peer.cpp
msgid "Input Buffer Max Size"
-msgstr ""
+msgstr "GiriÅŸ ArabelleÄŸi Maksimum Boyutu"
#: core/io/packet_peer.cpp
msgid "Output Buffer Max Size"
-msgstr ""
+msgstr "Çıkış Arabelleği Maksimum Boyutu"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
@@ -349,11 +352,11 @@ msgstr ""
#: core/io/stream_peer.cpp
msgid "Big Endian"
-msgstr ""
+msgstr "big-endian"
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "Veri Dizisi"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
@@ -383,12 +386,10 @@ msgid "Invalid input %d (not passed) in expression"
msgstr "İfadede geçersiz giriş %d"
#: core/math/expression.cpp
-#, fuzzy
msgid "self can't be used because instance is null (not passed)"
msgstr "self kullanılamaz çünkü örnek boş (geçilmedi)"
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid operands to operator %s, %s and %s."
msgstr "\"%s\" işlecinde geçersiz terimler, '%s' ve '%s'."
@@ -410,8 +411,9 @@ msgstr "'%s' çağrıldığında:"
#: core/math/random_number_generator.cpp
#: modules/opensimplex/open_simplex_noise.cpp
+#, fuzzy
msgid "Seed"
-msgstr ""
+msgstr "Tohum"
#: core/math/random_number_generator.cpp
msgid "State"
@@ -426,14 +428,12 @@ msgid "Max Size (KB)"
msgstr "En Büyük Boyut (KB)"
#: core/os/input.cpp
-#, fuzzy
msgid "Mouse Mode"
-msgstr "Biçimi Taşı"
+msgstr "Fare Modu"
#: core/os/input.cpp
-#, fuzzy
msgid "Use Accumulated Input"
-msgstr "GiriÅŸi Sil"
+msgstr "BirikmiÅŸ Girdiyi Kullan"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
@@ -451,10 +451,9 @@ msgstr "Shift"
#: core/os/input_event.cpp
#, fuzzy
msgid "Control"
-msgstr "Ctrl"
+msgstr "Kontrol TuÅŸu"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Meta"
msgstr "Meta"
@@ -463,9 +462,8 @@ msgid "Command"
msgstr "Komut"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Physical"
-msgstr " (Fiziksel)"
+msgstr "Fiziksel"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
@@ -474,7 +472,6 @@ msgid "Pressed"
msgstr "Basılmış"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
msgstr "Tarama kodu"
@@ -483,14 +480,12 @@ msgid "Physical Scancode"
msgstr "Fiziksel TuÅŸ Kodu"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Unicode"
-msgstr "Unicode"
+msgstr "Evrensel Kod"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Echo"
-msgstr "Eko"
+msgstr "Yankı"
#: core/os/input_event.cpp scene/gui/base_button.cpp
msgid "Button Mask"
@@ -501,9 +496,8 @@ msgid "Global Position"
msgstr "Global Pozisyon"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Factor"
-msgstr "Vektör"
+msgstr "Etken"
#: core/os/input_event.cpp
msgid "Button Index"
@@ -522,8 +516,9 @@ msgid "Pressure"
msgstr "Baskı"
#: core/os/input_event.cpp
+#, fuzzy
msgid "Pen Inverted"
-msgstr ""
+msgstr "Ters Kalem"
#: core/os/input_event.cpp
msgid "Relative"
@@ -584,18 +579,16 @@ msgid "Velocity"
msgstr "Hız"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Instrument"
msgstr "Alet"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Controller Number"
-msgstr "Satır Numarası:"
+msgstr "Denetleyici Numarası"
#: core/os/input_event.cpp
msgid "Controller Value"
-msgstr ""
+msgstr "Denetleyici DeÄŸeri"
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
@@ -719,7 +712,7 @@ msgstr "Ana Sahne DeÄŸiÅŸtirgenleri:"
#: core/project_settings.cpp
#, fuzzy
msgid "Scene Naming"
-msgstr "Sahne Yolu:"
+msgstr "Sahne Adlandırma"
#: core/project_settings.cpp
msgid "Search In File Extensions"
@@ -732,12 +725,12 @@ msgstr "Script Dosyalarını Aramak İçin Dosya Yolu"
#: core/project_settings.cpp
#, fuzzy
msgid "Version Control Autoload On Startup"
-msgstr "Başlangıçta Otomatik Yükleme"
+msgstr "Başlangıçta Otomatik Sürüm Kontrolü"
#: core/project_settings.cpp
#, fuzzy
msgid "Version Control Plugin Name"
-msgstr "Sürüm Kontrol"
+msgstr "Sürüm Denetimi Eklenti Adı"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -921,7 +914,6 @@ msgid "Modules"
msgstr "Modüller"
#: core/register_core_types.cpp
-#, fuzzy
msgid "TCP"
msgstr "TCP"
@@ -930,8 +922,9 @@ msgid "Connect Timeout Seconds"
msgstr "Bağlanma Zaman Aşımı Süresi(Saniye)"
#: core/register_core_types.cpp
+#, fuzzy
msgid "Packet Peer Stream"
-msgstr ""
+msgstr "Paket Eş Akışı"
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
@@ -977,7 +970,7 @@ msgstr "Deneme"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr ""
+msgstr "Geri Dönüş"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -1018,12 +1011,12 @@ msgstr "Arabellek"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Buffer Size (KB)"
-msgstr ""
+msgstr "Tuval Çokgen Arabellek Boyutu (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Index Buffer Size (KB)"
-msgstr ""
+msgstr "Tuval Çokgen Dizini Arabellek Boyutu (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp
@@ -1039,36 +1032,33 @@ msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Snapping"
msgstr "Akıllı Hizalama"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Use GPU Pixel Snap"
msgstr "Piksel Yapışması Kullan"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "Anlık Arabellek Boyutu (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
-#, fuzzy
msgid "Lightmapping"
-msgstr "Işık-Haritalarını Pişir"
+msgstr "Işık Haritalama"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
+#, fuzzy
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "Bicubic Örneklemeyi Kullanın"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Max Renderable Elements"
-msgstr "Maks. Renderlanabilinecek Ögeler"
+msgstr "Maksimum İşlenebilir Öğeler"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
@@ -1105,11 +1095,12 @@ msgstr "Yüzeyi Takip Et"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
-msgstr ""
+msgstr "Ağırlık Örnekleri"
#: drivers/gles3/rasterizer_scene_gles3.cpp
+#, fuzzy
msgid "Voxel Cone Tracing"
-msgstr ""
+msgstr "Işın İzleme"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
@@ -1117,7 +1108,7 @@ msgstr "Yüksek Kalite"
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Blend Shape Max Buffer Size (KB)"
-msgstr ""
+msgstr "Karışım Şekli Maksimum Arabellek Boyutu (KB)"
#. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror).
#: editor/animation_bezier_editor.cpp
@@ -1191,9 +1182,8 @@ msgstr "Animasyon Değişikliği Çağrısı"
#: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Frame"
-msgstr "Kare %"
+msgstr "Kare"
#: editor/animation_track_editor.cpp editor/editor_profiler.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
@@ -1248,8 +1238,9 @@ msgstr "Tutamacı Ayarla"
#: editor/import/resource_importer_texture.cpp
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
+#, fuzzy
msgid "Stream"
-msgstr ""
+msgstr "Aktarım"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1410,7 +1401,7 @@ msgstr "Tür:"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Geçersiz Dışa Aktarım Şablonu:"
+msgstr "(Geçersiz Dışa Aktarım Şablonu: %s)"
#: editor/animation_track_editor.cpp
msgid "Easing:"
@@ -1429,22 +1420,22 @@ msgstr "Tutamacı Ayarla"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Stream:"
-msgstr "Radyo Ögesi"
+msgstr "Aktarım:"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Start (s):"
-msgstr "Yeniden BaÅŸlat (sn):"
+msgstr "Başlangıç (lar):"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "End (s):"
-msgstr "Açılma (sn):"
+msgstr "BitiÅŸ (ler):"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Animation Clip:"
-msgstr "Animasyonlar:"
+msgstr "Animasyon Klibi:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1535,7 +1526,7 @@ msgstr "Düzenleyici"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#, fuzzy
msgid "Confirm Insert Track"
-msgstr "Animasyon İz & Anahtar Ekle"
+msgstr "Parça Eklemeyi Onayla"
#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
#: editor/animation_track_editor.cpp
@@ -1662,7 +1653,7 @@ msgstr "Yöntem İz Anahtarı Ekle"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Method not found in object:"
-msgstr "Metot, nesne içinde bulunamadı: "
+msgstr "Metot, nesne içinde bulunamadı:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2195,14 +2186,15 @@ msgstr "BeÄŸeniler:"
msgid "Recent:"
msgstr "Yakın zamanda:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Ara:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "EÅŸleÅŸmeler:"
@@ -2262,8 +2254,8 @@ msgstr "Yerine Geçecek Kaynak Ara:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -2271,8 +2263,9 @@ msgid "Open"
msgstr "Aç"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid "Owners of: %s (Total: %d)"
-msgstr ""
+msgstr "Sahipleri: %s (Toplam: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2631,7 +2624,7 @@ msgstr "'%s' dosyası bulunamadı."
#: editor/editor_audio_buses.cpp
#, fuzzy
msgid "Layout:"
-msgstr "Yerleşim Düzeni"
+msgstr "Yerleşim Düzeni:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2682,7 +2675,7 @@ msgstr "Yeni bir Bus Yerleşim Düzeni oluştur."
#: editor/editor_audio_buses.cpp
#, fuzzy
msgid "Audio Bus Layout"
-msgstr "Audio Bus Yerleşim Düzenini Aç"
+msgstr "Ses Veri Yolu Düzeni"
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -2834,23 +2827,24 @@ msgid "Choose"
msgstr "Seç"
#: editor/editor_export.cpp
+#, fuzzy
msgid "Project export for platform:"
-msgstr ""
+msgstr "Platform için proje dışa aktarımı:"
#: editor/editor_export.cpp
#, fuzzy
msgid "Completed with errors."
-msgstr "Düğüm Yolunu Kopyala"
+msgstr "Hatalarla tamamlandı."
#: editor/editor_export.cpp
#, fuzzy
msgid "Completed successfully."
-msgstr "Paket Başarı ile Kuruldu!"
+msgstr "Başarıyla tamamlandı."
#: editor/editor_export.cpp
#, fuzzy
msgid "Failed."
-msgstr "Başarısız:"
+msgstr "Başarısız."
#: editor/editor_export.cpp
msgid "Storing File:"
@@ -2867,27 +2861,27 @@ msgstr "Çıkınla"
#: editor/editor_export.cpp
#, fuzzy
msgid "Save PCK"
-msgstr "Farklı Kaydet"
+msgstr "PCK'yi kaydet"
#: editor/editor_export.cpp
#, fuzzy
msgid "Cannot create file \"%s\"."
-msgstr "Klasör oluşturulamadı."
+msgstr "\"%s\" dosyası oluşturulamıyor."
#: editor/editor_export.cpp
#, fuzzy
msgid "Failed to export project files."
-msgstr "Proje dosyaları dışa aktarılamadı"
+msgstr "Proje dosyaları dışa aktarılamadı."
#: editor/editor_export.cpp
#, fuzzy
msgid "Can't open file to read from path \"%s\"."
-msgstr "Dosya yazmak için açılamıyor:"
+msgstr "\"%s\" yolundan okunacak dosya açılamıyor."
#: editor/editor_export.cpp
#, fuzzy
msgid "Save ZIP"
-msgstr "Farklı Kaydet"
+msgstr "ZIP dosyasını kaydet"
#: editor/editor_export.cpp
msgid ""
@@ -2950,7 +2944,7 @@ msgstr ""
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
msgid "Custom Template"
-msgstr "Editör Teması"
+msgstr "Özel Şablon"
#: editor/editor_export.cpp editor/project_export.cpp
#: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp
@@ -2962,36 +2956,42 @@ msgstr "Yayınlamak"
#: editor/editor_export.cpp
#, fuzzy
msgid "Binary Format"
-msgstr "Renk operatörü."
+msgstr "Çift Biçim"
#: editor/editor_export.cpp
+#, fuzzy
msgid "64 Bits"
-msgstr ""
+msgstr "64 Bit"
#: editor/editor_export.cpp
+#, fuzzy
msgid "Embed PCK"
-msgstr ""
+msgstr "PCK'yı yerleştirin"
#: editor/editor_export.cpp platform/osx/export/export.cpp
#, fuzzy
msgid "Texture Format"
-msgstr "DokuBölgesi"
+msgstr "Doku Biçimi"
#: editor/editor_export.cpp
+#, fuzzy
msgid "BPTC"
-msgstr ""
+msgstr "BPTC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
msgid "S3TC"
-msgstr ""
+msgstr "S3TC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
msgid "ETC"
-msgstr ""
+msgstr "ETC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
msgid "ETC2"
-msgstr ""
+msgstr "ETC2"
#: editor/editor_export.cpp
#, fuzzy
@@ -3013,7 +3013,7 @@ msgstr "Özel yayınlama şablonu bulunamadı."
#: editor/editor_export.cpp
#, fuzzy
msgid "Prepare Template"
-msgstr "Şablonlarını Yönet"
+msgstr "Şablon Hazırla"
#: editor/editor_export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -3023,12 +3023,12 @@ msgstr "Belirtilen Dışa aktarım yolu mevcut değil:"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
#, fuzzy
msgid "Template file not found: \"%s\"."
-msgstr "Şablon dosyası bulunamadı:"
+msgstr "Şablon dosyası bulunamadı: \"%s\"."
#: editor/editor_export.cpp
#, fuzzy
msgid "Failed to copy export template."
-msgstr "Geçersiz Dışa Aktarım Şablonu:"
+msgstr "Dışa aktarma şablonu kopyalanamadı."
#: editor/editor_export.cpp platform/windows/export/export.cpp
#: platform/x11/export/export.cpp
@@ -3041,8 +3041,9 @@ msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "32-bit dışa aktarımlarda gömülü PCK 4GiB'tan büyük olamaz."
#: editor/editor_export.cpp
+#, fuzzy
msgid "Convert Text Resources To Binary On Export"
-msgstr ""
+msgstr "Dışa Aktarmada Metin Kaynaklarını İkili Dosyaya Dönüştür"
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
@@ -3253,7 +3254,7 @@ msgstr "Dışa Aktarım Şablonlarını Yönet"
#: editor/editor_feature_profile.cpp
#, fuzzy
msgid "Default Feature Profile"
-msgstr "Godot Özellik Profili"
+msgstr "Varsayılan Özellik Profili"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select Current Folder"
@@ -3327,12 +3328,12 @@ msgstr "Bir Dosya Kaydet"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Access"
-msgstr "Başarılı!"
+msgstr "EriÅŸim"
#: editor/editor_file_dialog.cpp editor/editor_settings.cpp
#, fuzzy
msgid "Display Mode"
-msgstr "Oynatma Modu:"
+msgstr "Ekran Modu"
#: editor/editor_file_dialog.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -3347,32 +3348,33 @@ msgstr "Oynatma Modu:"
#: servers/audio/effects/audio_effect_distortion.cpp
#, fuzzy
msgid "Mode"
-msgstr "Kaydırma Biçimi"
+msgstr "Mod"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Current Dir"
-msgstr "Geçerli:"
+msgstr "Geçerli Dizin"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Current File"
-msgstr "Åžu Anki Profil:"
+msgstr "Geçerli Dosya"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Current Path"
-msgstr "Geçerli:"
+msgstr "Geçerli Yol"
#: editor/editor_file_dialog.cpp editor/editor_settings.cpp
#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Show Hidden Files"
-msgstr "Gizli Dosyalari Aç / Kapat"
+msgstr "Gizli Dosyaları Göster"
#: editor/editor_file_dialog.cpp
+#, fuzzy
msgid "Disable Overwrite Warning"
-msgstr ""
+msgstr "Üzerine Yazma Uyarısını Devre Dışı Bırak"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
@@ -3474,8 +3476,9 @@ msgid "(Re)Importing Assets"
msgstr "Varlıklar Yeniden-İçe Aktarılıyor"
#: editor/editor_file_system.cpp
+#, fuzzy
msgid "Reimport Missing Imported Files"
-msgstr ""
+msgstr "İçe Aktarılan Eksik Dosyaları Yeniden İçe Aktar"
#: editor/editor_help.cpp scene/2d/camera_2d.cpp scene/gui/control.cpp
#: scene/gui/nine_patch_rect.cpp scene/resources/dynamic_font.cpp
@@ -3507,7 +3510,7 @@ msgstr "Özellikler"
#: editor/editor_help.cpp
#, fuzzy
msgid "overrides %s:"
-msgstr "% üzerine yazılmışlar:"
+msgstr "%s'yi geçersiz kılar:"
#: editor/editor_help.cpp
msgid "default:"
@@ -3579,7 +3582,7 @@ msgstr ""
#: modules/gdscript/gdscript_editor.cpp
#, fuzzy
msgid "Text Editor"
-msgstr "Düzenleyiciyi Aç"
+msgstr "Metin Düzenleyici"
#: editor/editor_help.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/shader_editor_plugin.cpp
@@ -3587,8 +3590,9 @@ msgid "Help"
msgstr "Yardım"
#: editor/editor_help.cpp
+#, fuzzy
msgid "Sort Functions Alphabetically"
-msgstr ""
+msgstr "Fonksiyonları Alfabetik Olarak Sırala"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3670,34 +3674,34 @@ msgstr "Özellik:"
#: editor/editor_inspector.cpp editor/editor_spin_slider.cpp
#, fuzzy
msgid "Label"
-msgstr "DeÄŸer"
+msgstr "Etiket"
#: editor/editor_inspector.cpp editor/editor_spin_slider.cpp
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
msgid "Read Only"
-msgstr "Sadece Metotlar"
+msgstr "Sadece Okunur"
#: editor/editor_inspector.cpp editor/plugins/item_list_editor_plugin.cpp
#, fuzzy
msgid "Checkable"
-msgstr "Öğeyi Denetle"
+msgstr "Kontrol edilebilir"
#: editor/editor_inspector.cpp editor/plugins/item_list_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
msgid "Checked"
-msgstr "Denetlenen Öğe"
+msgstr "Kontrol edildi"
#: editor/editor_inspector.cpp
#, fuzzy
msgid "Draw Red"
-msgstr "Çizim Çağrıları:"
+msgstr "Kırmızı Çiz"
#: editor/editor_inspector.cpp
#, fuzzy
msgid "Keying"
-msgstr "Oynat"
+msgstr "Anahtarlama"
#: editor/editor_inspector.cpp
msgid "Pin value"
@@ -4062,12 +4066,12 @@ msgstr "Betiği Hızlı Aç..."
#: editor/editor_node.cpp
#, fuzzy
msgid "Save & Reload"
-msgstr "Kaydet ve BaÅŸtan BaÅŸlat"
+msgstr "Kaydet ve Yeniden Yükle"
#: editor/editor_node.cpp
#, fuzzy
msgid "Save changes to '%s' before reloading?"
-msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?"
+msgstr "Çıkmadan önce değişiklikler '%s' ‘ye kaydedilsin mi?"
#: editor/editor_node.cpp
msgid "Save & Close"
@@ -4188,7 +4192,7 @@ msgstr "Proje Yöneticisi Açılsın Mı?"
#: editor/editor_node.cpp
#, fuzzy
msgid "Save changes to the following scene(s) before reloading?"
-msgstr "Çıkmadan önce değişiklikler aşağıdaki sahne(ler)e kaydedilsin mi?"
+msgstr "Çıkmadan önce değişiklikler sahne(ler)e kaydedilsin mi?"
#: editor/editor_node.cpp
msgid "Save & Quit"
@@ -4372,54 +4376,53 @@ msgid "%d more files"
msgstr "%d daha fazla dosyalar"
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
+"'%s' dosyasına yazılamıyor, dosya kullanımda, kilitli veya izinler eksik."
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
-#, fuzzy
msgid "Interface"
-msgstr "Kullanıcı Arayüzü"
+msgstr "Arayüz"
#: editor/editor_node.cpp editor/editor_settings.cpp
-#, fuzzy
msgid "Scene Tabs"
-msgstr "Sahne Sekmesine Geç"
+msgstr "Sahne Sekmeleri"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Always Show Close Button"
-msgstr "Daima Izgarayı Göster"
+msgstr "Daima Kapatma Düğmesini Göster"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Resize If Many Tabs"
-msgstr ""
+msgstr "Çok Sayıda Sekme Varsa Yeniden Boyutlandır"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Minimum Width"
-msgstr ""
+msgstr "Minimum GeniÅŸlik"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Output"
msgstr "Çıktı"
#: editor/editor_node.cpp editor/editor_settings.cpp
-#, fuzzy
msgid "Always Clear Output On Play"
-msgstr "Çıktıyı Temizle"
+msgstr "Oynatıldığında Çıktıyı Daima Temizle"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Open Output On Play"
-msgstr ""
+msgstr "Oynatıldığında Çıktıyı Daima Aç"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Close Output On Stop"
-msgstr ""
+msgstr "Durdurulduğunda Çıktıyı Daima Kapat"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Save On Focus Loss"
-msgstr ""
+msgstr "Odak Kaybından Tasarruf Edin"
#: editor/editor_node.cpp editor/editor_settings.cpp
#, fuzzy
@@ -5235,9 +5238,8 @@ msgid "Size:"
msgstr "Boyut:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Sayfa: "
+msgstr "Sayfa:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5537,7 +5539,7 @@ msgstr "Küçük Resim..."
#: editor/editor_settings.cpp
msgid "Docks"
-msgstr ""
+msgstr "Eklentiler"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5658,6 +5660,10 @@ msgid "Drag And Drop Selection"
msgstr "GridMap Seçimi"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -6204,7 +6210,7 @@ msgstr "Önden Görünüm"
#: modules/gdscript/language_server/gdscript_language_server.cpp
#, fuzzy
msgid "Remote Host"
-msgstr "Uzak "
+msgstr "Uzak Ana Bilgisayar"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
@@ -7199,7 +7205,7 @@ msgstr "İfade"
#: editor/import/resource_importer_obj.cpp
#, fuzzy
msgid "Optimize Mesh Flags"
-msgstr "Boyut: "
+msgstr "Boyut:"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -7403,7 +7409,7 @@ msgstr "Işık-haritaları Üretiliyor"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Örüntü için Üretiliyor: "
+msgstr "Örüntü için Üretiliyor:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7503,7 +7509,7 @@ msgstr "Rastgele Ölçek:"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
msgid "Size Limit"
-msgstr "Boyut: "
+msgstr "Boyut Limiti"
#: editor/import/resource_importer_texture.cpp
msgid "Detect 3D"
@@ -8426,7 +8432,7 @@ msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
#, fuzzy
msgid "Transition:"
-msgstr "Geçiş: "
+msgstr "Geçiş:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -10195,7 +10201,7 @@ msgstr "Oylum"
#: editor/plugins/particles_editor_plugin.cpp
#, fuzzy
msgid "Emission Source:"
-msgstr "Emisyon Kaynağı: "
+msgstr "Emisyon Kaynağı:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -11293,15 +11299,13 @@ msgstr "Çevir"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "Ölçekleniyor: "
+msgstr "Ölçekleniyor:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "Çeviriliyor: "
+msgstr "Çevriliyor:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11843,19 +11847,17 @@ msgid "Sprite"
msgstr "HayaliÇizimlik"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "SadeleÅŸtirme: "
+msgstr "SadeleÅŸtirme:"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Sıkıştır (Pikselleri): "
+msgstr "Sıkıştır (Pikselleri):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "Büyüt (Pikselleri): "
+msgstr "Büyüt (Piksel):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -11918,6 +11920,11 @@ msgid "New Animation"
msgstr "Yeni Animasyon"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Metotları filtrele"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Hız:"
@@ -13308,7 +13315,6 @@ msgid "Select SSH private key path"
msgstr "SSH özel anahtar yolu seç"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "SSH Passphrase"
msgstr "SSH Parolası"
@@ -16017,7 +16023,7 @@ msgstr "Düğüm Betiği İliştir"
#: editor/script_editor_debugger.cpp
#, fuzzy
msgid "Remote %s:"
-msgstr "Uzak "
+msgstr "Uzak %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -17077,9 +17083,8 @@ msgid "Disabled GDNative Singleton"
msgstr "GDNative İskeleti Pasifleştirildi"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "Kütüphaneler: "
+msgstr "Kütüphaneler:"
#: modules/gdnative/nativescript/nativescript.cpp
#, fuzzy
@@ -17983,7 +17988,7 @@ msgstr ""
#: modules/visual_script/visual_script.cpp
#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "Düğüm geçersiz bir dizi çıktısı döndürdü: "
+msgstr "Düğüm geçersiz bir dizi çıktısı döndürdü:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -18345,8 +18350,9 @@ msgid "if (cond) is:"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
+#, fuzzy
msgid "While"
-msgstr "While"
+msgstr "Sürece"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
@@ -22071,7 +22077,7 @@ msgstr "Kenar BoÅŸluk Belirle"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
msgid "Sync To Physics"
-msgstr " (Fiziksel)"
+msgstr "FiziÄŸe Senkronize Et"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -23575,7 +23581,7 @@ msgstr "Bir RoomGroup, bir Portal'ın çocuğu veya torunu olmamalıdır."
#: scene/3d/portal.cpp
#, fuzzy
msgid "Portal Active"
-msgstr " [portallar aktif]"
+msgstr "Portal Aktif"
#: scene/3d/portal.cpp scene/resources/occluder_shape_polygon.cpp
msgid "Two Way"
@@ -24866,7 +24872,7 @@ msgstr ""
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Caret"
-msgstr ""
+msgstr "Karet"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Blink"
@@ -25788,14 +25794,12 @@ msgid "3D Render"
msgstr "OluÅŸturucu:"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "2D Physics"
-msgstr " (Fiziksel)"
+msgstr "2B Fizik"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "3D Physics"
-msgstr " (Fiziksel)"
+msgstr "3B Fizik"
#: scene/register_scene_types.cpp
#, fuzzy
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index fd20ea0a29..0feae1a849 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -29,7 +29,7 @@ msgstr ""
"Project-Id-Version: Ukrainian (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-03 00:44+0000\n"
+"PO-Revision-Date: 2022-07-26 01:55+0000\n"
"Last-Translator: Artem <artem@molotov.work>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot/uk/>\n"
@@ -39,7 +39,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -2116,14 +2116,15 @@ msgstr "Вибране:"
msgid "Recent:"
msgstr "Ðещодавні:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Пошук:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Збіги:"
@@ -2183,8 +2184,8 @@ msgstr "Знайти замінний реÑурÑ:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5500,6 +5501,10 @@ msgid "Drag And Drop Selection"
msgstr "Вибір GridMap"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "ВиглÑд"
@@ -11612,6 +11617,11 @@ msgid "New Animation"
msgstr "Ðова анімаціÑ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Фільтрувати методи"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "ШвидкіÑть:"
@@ -25888,11 +25898,11 @@ msgstr "Розмір крапки"
#: scene/resources/material.cpp
msgid "Billboard Mode"
-msgstr "Режим афіші"
+msgstr "Режим розголоÑника"
#: scene/resources/material.cpp
msgid "Billboard Keep Scale"
-msgstr "Зберегти маÑштаб афіші"
+msgstr "Зберегти маÑштаб розголоÑника"
#: scene/resources/material.cpp
msgid "Grow"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index 46cd56a57b..9cb56f3c21 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -2132,14 +2132,15 @@ msgstr ""
msgid "Recent:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr ""
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr ""
@@ -2195,8 +2196,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5421,6 +5422,10 @@ msgid "Drag And Drop Selection"
msgstr ".تمام کا انتخاب"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -11599,6 +11604,11 @@ msgid "New Animation"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index 32fe3c1087..4a6164f7e1 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -2149,14 +2149,15 @@ msgstr "Ưa thích:"
msgid "Recent:"
msgstr "Gần đây:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "Tìm kiếm:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "Phù hợp:"
@@ -2216,8 +2217,8 @@ msgstr "Tìm kiếm tài nguyên thay thế:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5506,6 +5507,10 @@ msgid "Drag And Drop Selection"
msgstr "Chá»n tất cả"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "Ngoại hình"
@@ -11788,6 +11793,11 @@ msgid "New Animation"
msgstr "Hoạt hình mới"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "Lá»c phương thức"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "Tốc độ:"
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index a2183dd550..bd012a4c76 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -89,7 +89,7 @@ msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2022-07-09 21:12+0000\n"
+"PO-Revision-Date: 2022-07-19 16:26+0000\n"
"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hans/>\n"
@@ -98,7 +98,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.13.1-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -521,9 +521,8 @@ msgid "Pressure"
msgstr "压力"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pen Inverted"
-msgstr "翻转"
+msgstr "笔触翻转"
#: core/os/input_event.cpp
msgid "Relative"
@@ -2157,14 +2156,15 @@ msgstr "æ”¶è—:"
msgid "Recent:"
msgstr "最近使用:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "æœç´¢ï¼š"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "匹é…项:"
@@ -2224,8 +2224,8 @@ msgstr "查找替æ¢èµ„æºï¼š"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5444,6 +5444,10 @@ msgid "Drag And Drop Selection"
msgstr "拖放选中内容"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "外观"
@@ -10700,7 +10704,7 @@ msgid ""
"This shader has been modified on on disk.\n"
"What action should be taken?"
msgstr ""
-"æ­¤ç€è‰²å™¨å·²åœ¨ç£ç›˜ä¸Šä¿®æ”¹ã€‚\n"
+"这个ç€è‰²å™¨å·²åœ¨ç£ç›˜ä¸Šä¿®æ”¹ã€‚\n"
"应该采å–什么行动?"
#: editor/plugins/shader_editor_plugin.cpp scene/resources/material.cpp
@@ -11466,6 +11470,11 @@ msgid "New Animation"
msgstr "新建动画"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "筛选方法"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "速度:"
@@ -22562,9 +22571,8 @@ msgstr ""
"建议修改å­èŠ‚ç‚¹çš„ç¢°æ’žä½“å½¢çŠ¶å°ºå¯¸ã€‚"
#: scene/3d/spatial.cpp
-#, fuzzy
msgid "Global Translation"
-msgstr "å…¨å±€å˜æ¢"
+msgstr "全局平移"
#: scene/3d/spatial.cpp
msgid "Matrix"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index dcd0403c6a..424752a849 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -2228,14 +2228,15 @@ msgstr "最愛:"
msgid "Recent:"
msgstr "最近:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "æœå°‹ï¼š"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "å»åˆï¼š"
@@ -2291,8 +2292,8 @@ msgstr ""
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5677,6 +5678,10 @@ msgid "Drag And Drop Selection"
msgstr "刪除é¸ä¸­æª”案"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr ""
@@ -12116,6 +12121,11 @@ msgid "New Animation"
msgstr "新的動畫å稱:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "篩é¸:"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr ""
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index d56bc9ec23..f5568c41b5 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -41,7 +41,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-07-18 08:11+0000\n"
+"PO-Revision-Date: 2022-07-23 03:57+0000\n"
"Last-Translator: è˜è˜ <rrt467778@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant/>\n"
@@ -2112,14 +2112,15 @@ msgstr "我的最愛:"
msgid "Recent:"
msgstr "最近存å–:"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/rename_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search:"
msgstr "æœå°‹ï¼š"
-#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/create_dialog.cpp editor/editor_quick_open.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Matches:"
msgstr "ç¬¦åˆæ¢ä»¶ï¼š"
@@ -2179,8 +2180,8 @@ msgstr "æœå°‹ä¸¦å–代資æºï¼š"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/editor_quick_open.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_create_dialog.cpp
#: modules/visual_script/visual_script_property_selector.cpp
#: scene/gui/file_dialog.cpp
@@ -5402,6 +5403,10 @@ msgid "Drag And Drop Selection"
msgstr "æ‹–ç§»é¸æ“‡çš„æª”案"
#: editor/editor_settings.cpp
+msgid "Stay In Script Editor On Node Selected"
+msgstr ""
+
+#: editor/editor_settings.cpp
msgid "Appearance"
msgstr "外觀"
@@ -11438,6 +11443,11 @@ msgid "New Animation"
msgstr "新增動畫"
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Filter animations"
+msgstr "ç¯©é¸æ–¹æ³•"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed:"
msgstr "速度:"
@@ -23144,9 +23154,8 @@ msgstr ""
"請改為修改其å­ç¯€é»žçš„碰撞形狀之大å°ã€‚"
#: scene/3d/spatial.cpp
-#, fuzzy
msgid "Global Translation"
-msgstr "ä¿æŒå…¨åŸŸè®Šæ›"
+msgstr "全域變æ›"
#: scene/3d/spatial.cpp
msgid "Matrix"
diff --git a/modules/gdscript/gdscript_byte_codegen.cpp b/modules/gdscript/gdscript_byte_codegen.cpp
index a1a28e7675..8e4ca44e81 100644
--- a/modules/gdscript/gdscript_byte_codegen.cpp
+++ b/modules/gdscript/gdscript_byte_codegen.cpp
@@ -1608,7 +1608,7 @@ void GDScriptByteCodeGenerator::write_return(const Address &p_return_value) {
// Typed array.
const GDScriptDataType &element_type = function->return_type.get_container_element_type();
- Variant script = function->return_type.script_type;
+ Variant script = element_type.script_type;
int script_idx = get_constant_pos(script) | (GDScriptFunction::ADDR_TYPE_CONSTANT << GDScriptFunction::ADDR_BITS);
append(GDScriptFunction::OPCODE_RETURN_TYPED_ARRAY, 2);
diff --git a/modules/gdscript/register_types.cpp b/modules/gdscript/register_types.cpp
index b230c6ba36..059ca703ab 100644
--- a/modules/gdscript/register_types.cpp
+++ b/modules/gdscript/register_types.cpp
@@ -52,10 +52,10 @@ GDScriptCache *gdscript_cache = nullptr;
#ifdef TOOLS_ENABLED
-#include "editor/editor_export.h"
#include "editor/editor_node.h"
#include "editor/editor_settings.h"
#include "editor/editor_translation_parser.h"
+#include "editor/export/editor_export.h"
#include "editor/gdscript_highlighter.h"
#include "editor/gdscript_translation_parser_plugin.h"
diff --git a/modules/openxr/action_map/openxr_interaction_profile.cpp b/modules/openxr/action_map/openxr_interaction_profile.cpp
index 342c36cdff..99d7a17acf 100644
--- a/modules/openxr/action_map/openxr_interaction_profile.cpp
+++ b/modules/openxr/action_map/openxr_interaction_profile.cpp
@@ -40,7 +40,7 @@ void OpenXRIPBinding::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_paths"), &OpenXRIPBinding::get_paths);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "paths", PROPERTY_HINT_ARRAY_TYPE, "STRING"), "set_paths", "get_paths");
- ClassDB::bind_method(D_METHOD("has_path"), &OpenXRIPBinding::has_path);
+ ClassDB::bind_method(D_METHOD("has_path", "path"), &OpenXRIPBinding::has_path);
ClassDB::bind_method(D_METHOD("add_path", "path"), &OpenXRIPBinding::add_path);
ClassDB::bind_method(D_METHOD("remove_path", "path"), &OpenXRIPBinding::remove_path);
}
diff --git a/modules/openxr/doc_classes/OpenXRIPBinding.xml b/modules/openxr/doc_classes/OpenXRIPBinding.xml
index 9e1176874a..f96637f2f5 100644
--- a/modules/openxr/doc_classes/OpenXRIPBinding.xml
+++ b/modules/openxr/doc_classes/OpenXRIPBinding.xml
@@ -24,7 +24,7 @@
</method>
<method name="has_path" qualifiers="const">
<return type="bool" />
- <argument index="0" name="arg0" type="String" />
+ <argument index="0" name="path" type="String" />
<description>
Returns [code]true[/code] if this input/output path is part of this binding.
</description>
diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp
index 560f188b82..5bbe0ffab6 100644
--- a/platform/android/export/export.cpp
+++ b/platform/android/export/export.cpp
@@ -30,10 +30,10 @@
#include "export.h"
-#include "export_plugin.h"
-
#include "core/os/os.h"
#include "editor/editor_settings.h"
+#include "editor/export/editor_export.h"
+#include "export_plugin.h"
void register_android_exporter() {
EDITOR_DEF("export/android/android_sdk_path", "");
diff --git a/platform/android/export/export_plugin.h b/platform/android/export/export_plugin.h
index 15ac8091be..8fd2f0680d 100644
--- a/platform/android/export/export_plugin.h
+++ b/platform/android/export/export_plugin.h
@@ -35,7 +35,7 @@
#include "core/io/zip_io.h"
#include "core/os/os.h"
-#include "editor/editor_export.h"
+#include "editor/export/editor_export_platform.h"
const String SPLASH_CONFIG_XML_CONTENT = R"SPLASH(<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
diff --git a/platform/android/export/gradle_export_util.h b/platform/android/export/gradle_export_util.h
index 018ae649d6..232b4458c6 100644
--- a/platform/android/export/gradle_export_util.h
+++ b/platform/android/export/gradle_export_util.h
@@ -35,7 +35,7 @@
#include "core/io/file_access.h"
#include "core/io/zip_io.h"
#include "core/os/os.h"
-#include "editor/editor_export.h"
+#include "editor/export/editor_export.h"
const String godot_project_name_xml_string = R"(<?xml version="1.0" encoding="utf-8"?>
<!--WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
diff --git a/platform/android/file_access_filesystem_jandroid.cpp b/platform/android/file_access_filesystem_jandroid.cpp
index c1a48e025e..733d92f741 100644
--- a/platform/android/file_access_filesystem_jandroid.cpp
+++ b/platform/android/file_access_filesystem_jandroid.cpp
@@ -30,6 +30,7 @@
#include "file_access_filesystem_jandroid.h"
#include "core/os/os.h"
+#include "core/templates/local_vector.h"
#include "thread_jandroid.h"
#include <unistd.h>
@@ -166,6 +167,51 @@ uint8_t FileAccessFilesystemJAndroid::get_8() const {
return byte;
}
+String FileAccessFilesystemJAndroid::get_line() const {
+ ERR_FAIL_COND_V_MSG(!is_open(), String(), "File must be opened before use.");
+
+ const size_t buffer_size_limit = 2048;
+ const uint64_t file_size = get_length();
+ const uint64_t start_position = get_position();
+
+ String result;
+ LocalVector<uint8_t> line_buffer;
+ size_t current_buffer_size = 0;
+ uint64_t line_buffer_position = 0;
+
+ while (true) {
+ size_t line_buffer_size = MIN(buffer_size_limit, file_size - get_position());
+ if (line_buffer_size <= 0) {
+ break;
+ }
+
+ current_buffer_size += line_buffer_size;
+ line_buffer.resize(current_buffer_size);
+
+ uint64_t bytes_read = get_buffer(&line_buffer[line_buffer_position], current_buffer_size - line_buffer_position);
+ if (bytes_read <= 0) {
+ break;
+ }
+
+ for (; bytes_read > 0; line_buffer_position++, bytes_read--) {
+ uint8_t elem = line_buffer[line_buffer_position];
+ if (elem == '\n' || elem == '\0') {
+ // Found the end of the line
+ const_cast<FileAccessFilesystemJAndroid *>(this)->seek(start_position + line_buffer_position + 1);
+ if (result.parse_utf8((const char *)line_buffer.ptr(), line_buffer_position)) {
+ return String();
+ }
+ return result;
+ }
+ }
+ }
+
+ if (result.parse_utf8((const char *)line_buffer.ptr(), line_buffer_position)) {
+ return String();
+ }
+ return result;
+}
+
uint64_t FileAccessFilesystemJAndroid::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
if (_file_read) {
ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use.");
diff --git a/platform/android/file_access_filesystem_jandroid.h b/platform/android/file_access_filesystem_jandroid.h
index 18d5df1628..7deb8de37b 100644
--- a/platform/android/file_access_filesystem_jandroid.h
+++ b/platform/android/file_access_filesystem_jandroid.h
@@ -74,6 +74,7 @@ public:
virtual bool eof_reached() const override; ///< reading passed EOF
virtual uint8_t get_8() const override; ///< get a byte
+ virtual String get_line() const override; ///< get a line
virtual uint64_t get_buffer(uint8_t *p_dst, uint64_t p_length) const override;
virtual Error get_error() const override; ///< get last error
diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt b/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt
index c7bd55b620..c9282dd247 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt
@@ -54,11 +54,19 @@ internal enum class StorageScope {
*/
UNKNOWN;
- companion object {
+ class Identifier(context: Context) {
+
+ private val internalAppDir: String? = context.filesDir.canonicalPath
+ private val internalCacheDir: String? = context.cacheDir.canonicalPath
+ private val externalAppDir: String? = context.getExternalFilesDir(null)?.canonicalPath
+ private val sharedDir : String? = Environment.getExternalStorageDirectory().canonicalPath
+ private val downloadsSharedDir: String? = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).canonicalPath
+ private val documentsSharedDir: String? = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).canonicalPath
+
/**
* Determines which [StorageScope] the given path falls under.
*/
- fun getStorageScope(context: Context, path: String?): StorageScope {
+ fun identifyStorageScope(path: String?): StorageScope {
if (path == null) {
return UNKNOWN
}
@@ -70,23 +78,19 @@ internal enum class StorageScope {
val canonicalPathFile = pathFile.canonicalPath
- val internalAppDir = context.filesDir.canonicalPath ?: return UNKNOWN
- if (canonicalPathFile.startsWith(internalAppDir)) {
+ if (internalAppDir != null && canonicalPathFile.startsWith(internalAppDir)) {
return APP
}
- val internalCacheDir = context.cacheDir.canonicalPath ?: return UNKNOWN
- if (canonicalPathFile.startsWith(internalCacheDir)) {
+ if (internalCacheDir != null && canonicalPathFile.startsWith(internalCacheDir)) {
return APP
}
- val externalAppDir = context.getExternalFilesDir(null)?.canonicalPath ?: return UNKNOWN
- if (canonicalPathFile.startsWith(externalAppDir)) {
+ if (externalAppDir != null && canonicalPathFile.startsWith(externalAppDir)) {
return APP
}
- val sharedDir = Environment.getExternalStorageDirectory().canonicalPath ?: return UNKNOWN
- if (canonicalPathFile.startsWith(sharedDir)) {
+ if (sharedDir != null && canonicalPathFile.startsWith(sharedDir)) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
// Before R, apps had access to shared storage so long as they have the right
// permissions (and flag on Q).
@@ -95,13 +99,8 @@ internal enum class StorageScope {
// Post R, access is limited based on the target destination
// 'Downloads' and 'Documents' are still accessible
- val downloadsSharedDir =
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).canonicalPath
- ?: return SHARED
- val documentsSharedDir =
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).canonicalPath
- ?: return SHARED
- if (canonicalPathFile.startsWith(downloadsSharedDir) || canonicalPathFile.startsWith(documentsSharedDir)) {
+ if ((downloadsSharedDir != null && canonicalPathFile.startsWith(downloadsSharedDir))
+ || (documentsSharedDir != null && canonicalPathFile.startsWith(documentsSharedDir))) {
return APP
}
diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt b/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt
index c3acf42568..54fc56fa3e 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt
@@ -54,6 +54,7 @@ internal class FilesystemDirectoryAccess(private val context: Context):
private data class DirData(val dirFile: File, val files: Array<File>, var current: Int = 0)
+ private val storageScopeIdentifier = StorageScope.Identifier(context)
private val storageManager = context.getSystemService(Context.STORAGE_SERVICE) as StorageManager
private var lastDirId = STARTING_DIR_ID
private val dirs = SparseArray<DirData>()
@@ -62,7 +63,7 @@ internal class FilesystemDirectoryAccess(private val context: Context):
// Directory access is available for shared storage on Android 11+
// On Android 10, access is also available as long as the `requestLegacyExternalStorage`
// tag is available.
- return StorageScope.getStorageScope(context, path) != StorageScope.UNKNOWN
+ return storageScopeIdentifier.identifyStorageScope(path) != StorageScope.UNKNOWN
}
override fun hasDirId(dirId: Int) = dirs.indexOfKey(dirId) >= 0
@@ -102,7 +103,7 @@ internal class FilesystemDirectoryAccess(private val context: Context):
}
}
- override fun fileExists(path: String) = FileAccessHandler.fileExists(context, path)
+ override fun fileExists(path: String) = FileAccessHandler.fileExists(context, storageScopeIdentifier, path)
override fun dirNext(dirId: Int): String {
val dirData = dirs[dirId]
@@ -199,7 +200,7 @@ internal class FilesystemDirectoryAccess(private val context: Context):
if (fromFile.isDirectory) {
fromFile.renameTo(File(to))
} else {
- FileAccessHandler.renameFile(context, from, to)
+ FileAccessHandler.renameFile(context, storageScopeIdentifier, from, to)
}
} catch (e: SecurityException) {
false
@@ -218,7 +219,7 @@ internal class FilesystemDirectoryAccess(private val context: Context):
if (deleteFile.isDirectory) {
deleteFile.delete()
} else {
- FileAccessHandler.removeFile(context, filename)
+ FileAccessHandler.removeFile(context, storageScopeIdentifier, filename)
}
} else {
true
diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt
index aef1bed8ce..463dabfb23 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt
@@ -161,8 +161,9 @@ internal abstract class DataAccess(private val filePath: String) {
fun read(buffer: ByteBuffer): Int {
return try {
val readBytes = fileChannel.read(buffer)
+ endOfFile = readBytes == -1
+ || (fileChannel.position() >= fileChannel.size() && fileChannel.size() > 0)
if (readBytes == -1) {
- endOfFile = true
0
} else {
readBytes
diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt
index a4e0a82d6e..04b6772c45 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt
@@ -49,8 +49,8 @@ class FileAccessHandler(val context: Context) {
private const val INVALID_FILE_ID = 0
private const val STARTING_FILE_ID = 1
- fun fileExists(context: Context, path: String?): Boolean {
- val storageScope = StorageScope.getStorageScope(context, path)
+ internal fun fileExists(context: Context, storageScopeIdentifier: StorageScope.Identifier, path: String?): Boolean {
+ val storageScope = storageScopeIdentifier.identifyStorageScope(path)
if (storageScope == StorageScope.UNKNOWN) {
return false
}
@@ -62,8 +62,8 @@ class FileAccessHandler(val context: Context) {
}
}
- fun removeFile(context: Context, path: String?): Boolean {
- val storageScope = StorageScope.getStorageScope(context, path)
+ internal fun removeFile(context: Context, storageScopeIdentifier: StorageScope.Identifier, path: String?): Boolean {
+ val storageScope = storageScopeIdentifier.identifyStorageScope(path)
if (storageScope == StorageScope.UNKNOWN) {
return false
}
@@ -75,8 +75,8 @@ class FileAccessHandler(val context: Context) {
}
}
- fun renameFile(context: Context, from: String?, to: String?): Boolean {
- val storageScope = StorageScope.getStorageScope(context, from)
+ internal fun renameFile(context: Context, storageScopeIdentifier: StorageScope.Identifier, from: String?, to: String?): Boolean {
+ val storageScope = storageScopeIdentifier.identifyStorageScope(from)
if (storageScope == StorageScope.UNKNOWN) {
return false
}
@@ -89,13 +89,14 @@ class FileAccessHandler(val context: Context) {
}
}
+ private val storageScopeIdentifier = StorageScope.Identifier(context)
private val files = SparseArray<DataAccess>()
private var lastFileId = STARTING_FILE_ID
private fun hasFileId(fileId: Int) = files.indexOfKey(fileId) >= 0
fun fileOpen(path: String?, modeFlags: Int): Int {
- val storageScope = StorageScope.getStorageScope(context, path)
+ val storageScope = storageScopeIdentifier.identifyStorageScope(path)
if (storageScope == StorageScope.UNKNOWN) {
return INVALID_FILE_ID
}
@@ -162,10 +163,10 @@ class FileAccessHandler(val context: Context) {
files[fileId].flush()
}
- fun fileExists(path: String?) = Companion.fileExists(context, path)
+ fun fileExists(path: String?) = Companion.fileExists(context, storageScopeIdentifier, path)
fun fileLastModified(filepath: String?): Long {
- val storageScope = StorageScope.getStorageScope(context, filepath)
+ val storageScope = storageScopeIdentifier.identifyStorageScope(filepath)
if (storageScope == StorageScope.UNKNOWN) {
return 0L
}
diff --git a/platform/ios/export/export.cpp b/platform/ios/export/export.cpp
index 1531c2bde5..6024db2f2c 100644
--- a/platform/ios/export/export.cpp
+++ b/platform/ios/export/export.cpp
@@ -30,6 +30,7 @@
#include "export.h"
+#include "editor/export/editor_export.h"
#include "export_plugin.h"
void register_ios_exporter() {
diff --git a/platform/ios/export/export_plugin.h b/platform/ios/export/export_plugin.h
index 91b13419f1..ce470bba78 100644
--- a/platform/ios/export/export_plugin.h
+++ b/platform/ios/export/export_plugin.h
@@ -40,8 +40,8 @@
#include "core/os/os.h"
#include "core/templates/safe_refcount.h"
#include "core/version.h"
-#include "editor/editor_export.h"
#include "editor/editor_settings.h"
+#include "editor/export/editor_export_platform.h"
#include "main/splash.gen.h"
#include "platform/ios/logo.gen.h"
#include "string.h"
diff --git a/platform/ios/os_ios.h b/platform/ios/os_ios.h
index cfd1771653..3b88f53b6a 100644
--- a/platform/ios/os_ios.h
+++ b/platform/ios/os_ios.h
@@ -92,6 +92,9 @@ public:
virtual void alert(const String &p_alert, const String &p_title = "ALERT!") override;
+ virtual Vector<String> get_system_fonts() const override;
+ virtual String get_system_font_path(const String &p_font_name, bool p_bold = false, bool p_italic = false) const override;
+
virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false, String *r_resolved_path = nullptr) override;
virtual Error close_dynamic_library(void *p_library_handle) override;
virtual Error get_dynamic_library_symbol_handle(void *p_library_handle, const String p_name, void *&p_symbol_handle, bool p_optional = false) override;
diff --git a/platform/ios/os_ios.mm b/platform/ios/os_ios.mm
index 880315209e..b9d186f355 100644
--- a/platform/ios/os_ios.mm
+++ b/platform/ios/os_ios.mm
@@ -44,6 +44,7 @@
#import "view_controller.h"
#import <AudioToolbox/AudioServices.h>
+#import <CoreText/CoreText.h>
#import <UIKit/UIKit.h>
#import <dlfcn.h>
#include <sys/sysctl.h>
@@ -302,6 +303,80 @@ String OS_IOS::get_processor_name() const {
ERR_FAIL_V_MSG("", String("Couldn't get the CPU model name. Returning an empty string."));
}
+Vector<String> OS_IOS::get_system_fonts() const {
+ HashSet<String> font_names;
+ CFArrayRef fonts = CTFontManagerCopyAvailableFontFamilyNames();
+ if (fonts) {
+ for (CFIndex i = 0; i < CFArrayGetCount(fonts); i++) {
+ CFStringRef cf_name = (CFStringRef)CFArrayGetValueAtIndex(fonts, i);
+ if (cf_name && (CFStringGetLength(cf_name) > 0) && (CFStringCompare(cf_name, CFSTR("LastResort"), kCFCompareCaseInsensitive) != kCFCompareEqualTo) && (CFStringGetCharacterAtIndex(cf_name, 0) != '.')) {
+ NSString *ns_name = (__bridge NSString *)cf_name;
+ font_names.insert(String::utf8([ns_name UTF8String]));
+ }
+ }
+ CFRelease(fonts);
+ }
+
+ Vector<String> ret;
+ for (const String &E : font_names) {
+ ret.push_back(E);
+ }
+ return ret;
+}
+
+String OS_IOS::get_system_font_path(const String &p_font_name, bool p_bold, bool p_italic) const {
+ String ret;
+
+ String font_name = p_font_name;
+ if (font_name.to_lower() == "sans-serif") {
+ font_name = "Helvetica";
+ } else if (font_name.to_lower() == "serif") {
+ font_name = "Times";
+ } else if (font_name.to_lower() == "monospace") {
+ font_name = "Courier";
+ } else if (font_name.to_lower() == "fantasy") {
+ font_name = "Papyrus";
+ } else if (font_name.to_lower() == "cursive") {
+ font_name = "Apple Chancery";
+ };
+
+ CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, font_name.utf8().get_data(), kCFStringEncodingUTF8);
+
+ CTFontSymbolicTraits traits = 0;
+ if (p_bold) {
+ traits |= kCTFontBoldTrait;
+ }
+ if (p_italic) {
+ traits |= kCTFontItalicTrait;
+ }
+
+ CFNumberRef sym_traits = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &traits);
+ CFMutableDictionaryRef traits_dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, nullptr, nullptr);
+ CFDictionaryAddValue(traits_dict, kCTFontSymbolicTrait, sym_traits);
+
+ CFMutableDictionaryRef attributes = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, nullptr, nullptr);
+ CFDictionaryAddValue(attributes, kCTFontFamilyNameAttribute, name);
+ CFDictionaryAddValue(attributes, kCTFontTraitsAttribute, traits_dict);
+
+ CTFontDescriptorRef font = CTFontDescriptorCreateWithAttributes(attributes);
+ if (font) {
+ CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(font, kCTFontURLAttribute);
+ if (url) {
+ NSString *font_path = [NSString stringWithString:[(__bridge NSURL *)url path]];
+ ret = String::utf8([font_path UTF8String]);
+ CFRelease(url);
+ }
+ CFRelease(font);
+ }
+
+ CFRelease(attributes);
+ CFRelease(traits_dict);
+ CFRelease(sym_traits);
+ CFRelease(name);
+
+ return ret;
+}
+
void OS_IOS::vibrate_handheld(int p_duration_ms) {
if (ios->supports_haptic_engine()) {
ios->vibrate_haptic_engine((float)p_duration_ms / 1000.f);
diff --git a/platform/javascript/export/export_plugin.h b/platform/javascript/export/export_plugin.h
index a6df8e7094..e6ca5976df 100644
--- a/platform/javascript/export/export_plugin.h
+++ b/platform/javascript/export/export_plugin.h
@@ -36,8 +36,8 @@
#include "core/io/stream_peer_ssl.h"
#include "core/io/tcp_server.h"
#include "core/io/zip_io.h"
-#include "editor/editor_export.h"
#include "editor/editor_node.h"
+#include "editor/export/editor_export_platform.h"
#include "main/splash.gen.h"
#include "platform/javascript/logo.gen.h"
#include "platform/javascript/run_icon.gen.h"
diff --git a/platform/javascript/export/export_server.h b/platform/javascript/export/export_server.h
index 7cdbcec064..ddbe3cca30 100644
--- a/platform/javascript/export/export_server.h
+++ b/platform/javascript/export/export_server.h
@@ -35,7 +35,6 @@
#include "core/io/stream_peer_ssl.h"
#include "core/io/tcp_server.h"
#include "core/io/zip_io.h"
-#include "editor/editor_export.h"
#include "editor/editor_paths.h"
class EditorHTTPServer : public RefCounted {
diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py
index 065250c40e..b9cbf9b97c 100644
--- a/platform/linuxbsd/detect.py
+++ b/platform/linuxbsd/detect.py
@@ -298,6 +298,12 @@ def configure(env):
## Flags
+ if os.system("pkg-config --exists fontconfig") == 0: # 0 means found
+ env.Append(CPPDEFINES=["FONTCONFIG_ENABLED"])
+ env.ParseConfig("pkg-config fontconfig --cflags --libs")
+ else:
+ print("Warning: fontconfig libraries not found. Disabling the system fonts support.")
+
if os.system("pkg-config --exists alsa") == 0: # 0 means found
env["alsa"] = True
env.Append(CPPDEFINES=["ALSA_ENABLED", "ALSAMIDI_ENABLED"])
diff --git a/platform/linuxbsd/export/export.cpp b/platform/linuxbsd/export/export.cpp
index 4240e9adc0..bc1235bcec 100644
--- a/platform/linuxbsd/export/export.cpp
+++ b/platform/linuxbsd/export/export.cpp
@@ -30,6 +30,7 @@
#include "export.h"
+#include "editor/export/editor_export.h"
#include "export_plugin.h"
void register_linuxbsd_exporter() {
diff --git a/platform/linuxbsd/export/export_plugin.h b/platform/linuxbsd/export/export_plugin.h
index ccdf2ecc9f..98e4616035 100644
--- a/platform/linuxbsd/export/export_plugin.h
+++ b/platform/linuxbsd/export/export_plugin.h
@@ -32,8 +32,8 @@
#define LINUXBSD_EXPORT_PLUGIN_H
#include "core/io/file_access.h"
-#include "editor/editor_export.h"
#include "editor/editor_settings.h"
+#include "editor/export/editor_export_platform_pc.h"
#include "platform/linuxbsd/logo.gen.h"
#include "scene/resources/texture.h"
diff --git a/platform/linuxbsd/os_linuxbsd.cpp b/platform/linuxbsd/os_linuxbsd.cpp
index b73d4dc626..bf4634a4fd 100644
--- a/platform/linuxbsd/os_linuxbsd.cpp
+++ b/platform/linuxbsd/os_linuxbsd.cpp
@@ -52,6 +52,10 @@
#include <sys/types.h>
#include <unistd.h>
+#ifdef FONTCONFIG_ENABLED
+#include <fontconfig/fontconfig.h>
+#endif
+
void OS_LinuxBSD::alert(const String &p_alert, const String &p_title) {
const char *message_programs[] = { "zenity", "kdialog", "Xdialog", "xmessage" };
@@ -327,6 +331,91 @@ uint64_t OS_LinuxBSD::get_embedded_pck_offset() const {
return off;
}
+Vector<String> OS_LinuxBSD::get_system_fonts() const {
+#ifdef FONTCONFIG_ENABLED
+ HashSet<String> font_names;
+ Vector<String> ret;
+
+ FcConfig *config = FcInitLoadConfigAndFonts();
+ ERR_FAIL_COND_V(!config, ret);
+
+ FcObjectSet *object_set = FcObjectSetBuild(FC_FAMILY, nullptr);
+ ERR_FAIL_COND_V(!object_set, ret);
+
+ static const char *allowed_formats[] = { "TrueType", "CFF" };
+ for (size_t i = 0; i < sizeof(allowed_formats) / sizeof(const char *); i++) {
+ FcPattern *pattern = FcPatternCreate();
+ ERR_CONTINUE(!pattern);
+
+ FcPatternAddBool(pattern, FC_SCALABLE, FcTrue);
+ FcPatternAddString(pattern, FC_FONTFORMAT, reinterpret_cast<const FcChar8 *>(allowed_formats[i]));
+
+ FcFontSet *font_set = FcFontList(config, pattern, object_set);
+ if (font_set) {
+ for (int j = 0; j < font_set->nfont; j++) {
+ char *family_name = nullptr;
+ if (FcPatternGetString(font_set->fonts[j], FC_FAMILY, 0, reinterpret_cast<FcChar8 **>(&family_name)) == FcResultMatch) {
+ if (family_name) {
+ font_names.insert(String::utf8(family_name));
+ }
+ }
+ }
+ FcFontSetDestroy(font_set);
+ }
+ FcPatternDestroy(pattern);
+ }
+ FcObjectSetDestroy(object_set);
+
+ for (const String &E : font_names) {
+ ret.push_back(E);
+ }
+ return ret;
+#else
+ ERR_FAIL_COND_V_MSG(Vector<String>(), "Godot was compiled without fontconfig, system font support is disabled.")
+#endif
+}
+
+String OS_LinuxBSD::get_system_font_path(const String &p_font_name, bool p_bold, bool p_italic) const {
+#ifdef FONTCONFIG_ENABLED
+ String ret;
+
+ FcConfig *config = FcInitLoadConfigAndFonts();
+ ERR_FAIL_COND_V(!config, ret);
+
+ FcObjectSet *object_set = FcObjectSetBuild(FC_FAMILY, FC_FILE, nullptr);
+ ERR_FAIL_COND_V(!object_set, ret);
+
+ FcPattern *pattern = FcPatternCreate();
+ if (pattern) {
+ FcPatternAddBool(pattern, FC_SCALABLE, FcTrue);
+ FcPatternAddString(pattern, FC_FAMILY, reinterpret_cast<const FcChar8 *>(p_font_name.utf8().get_data()));
+ FcPatternAddInteger(pattern, FC_WEIGHT, p_bold ? FC_WEIGHT_BOLD : FC_WEIGHT_NORMAL);
+ FcPatternAddInteger(pattern, FC_SLANT, p_italic ? FC_SLANT_ITALIC : FC_SLANT_ROMAN);
+
+ FcConfigSubstitute(0, pattern, FcMatchPattern);
+ FcDefaultSubstitute(pattern);
+
+ FcResult result;
+ FcPattern *match = FcFontMatch(0, pattern, &result);
+ if (match) {
+ char *file_name = nullptr;
+ if (FcPatternGetString(match, FC_FILE, 0, reinterpret_cast<FcChar8 **>(&file_name)) == FcResultMatch) {
+ if (file_name) {
+ ret = String::utf8(file_name);
+ }
+ }
+
+ FcPatternDestroy(match);
+ }
+ FcPatternDestroy(pattern);
+ }
+ FcObjectSetDestroy(object_set);
+#else
+ ERR_FAIL_COND_V_MSG(Vector<String>(), "Godot was compiled without fontconfig, system font support is disabled.")
+#endif
+ return ret;
+}
+
String OS_LinuxBSD::get_config_path() const {
if (has_environment("XDG_CONFIG_HOME")) {
if (get_environment("XDG_CONFIG_HOME").is_absolute_path()) {
diff --git a/platform/linuxbsd/os_linuxbsd.h b/platform/linuxbsd/os_linuxbsd.h
index 13c07842fb..095bcb6427 100644
--- a/platform/linuxbsd/os_linuxbsd.h
+++ b/platform/linuxbsd/os_linuxbsd.h
@@ -80,6 +80,9 @@ public:
virtual uint64_t get_embedded_pck_offset() const override;
+ virtual Vector<String> get_system_fonts() const override;
+ virtual String get_system_font_path(const String &p_font_name, bool p_bold = false, bool p_italic = false) const override;
+
virtual String get_config_path() const override;
virtual String get_data_path() const override;
virtual String get_cache_path() const override;
diff --git a/platform/macos/export/export_plugin.h b/platform/macos/export/export_plugin.h
index e2e9cc3d22..4f4b17594c 100644
--- a/platform/macos/export/export_plugin.h
+++ b/platform/macos/export/export_plugin.h
@@ -39,8 +39,8 @@
#include "core/io/zip_io.h"
#include "core/os/os.h"
#include "core/version.h"
-#include "editor/editor_export.h"
#include "editor/editor_settings.h"
+#include "editor/export/editor_export.h"
#include "platform/macos/logo.gen.h"
#include <sys/stat.h>
diff --git a/platform/macos/os_macos.h b/platform/macos/os_macos.h
index a6c23ab71e..a1eb0f7f69 100644
--- a/platform/macos/os_macos.h
+++ b/platform/macos/os_macos.h
@@ -97,6 +97,8 @@ public:
virtual String get_locale() const override;
+ virtual Vector<String> get_system_fonts() const override;
+ virtual String get_system_font_path(const String &p_font_name, bool p_bold = false, bool p_italic = false) const override;
virtual String get_executable_path() const override;
virtual Error create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id = nullptr, bool p_open_console = false) override;
virtual Error create_instance(const List<String> &p_arguments, ProcessID *r_child_id = nullptr) override;
diff --git a/platform/macos/os_macos.mm b/platform/macos/os_macos.mm
index 2c6cd7de0b..cc550043de 100644
--- a/platform/macos/os_macos.mm
+++ b/platform/macos/os_macos.mm
@@ -303,6 +303,80 @@ String OS_MacOS::get_locale() const {
return String([locale_code UTF8String]).replace("-", "_");
}
+Vector<String> OS_MacOS::get_system_fonts() const {
+ HashSet<String> font_names;
+ CFArrayRef fonts = CTFontManagerCopyAvailableFontFamilyNames();
+ if (fonts) {
+ for (CFIndex i = 0; i < CFArrayGetCount(fonts); i++) {
+ CFStringRef cf_name = (CFStringRef)CFArrayGetValueAtIndex(fonts, i);
+ if (cf_name && (CFStringGetLength(cf_name) > 0) && (CFStringCompare(cf_name, CFSTR("LastResort"), kCFCompareCaseInsensitive) != kCFCompareEqualTo) && (CFStringGetCharacterAtIndex(cf_name, 0) != '.')) {
+ NSString *ns_name = (__bridge NSString *)cf_name;
+ font_names.insert(String::utf8([ns_name UTF8String]));
+ }
+ }
+ CFRelease(fonts);
+ }
+
+ Vector<String> ret;
+ for (const String &E : font_names) {
+ ret.push_back(E);
+ }
+ return ret;
+}
+
+String OS_MacOS::get_system_font_path(const String &p_font_name, bool p_bold, bool p_italic) const {
+ String ret;
+
+ String font_name = p_font_name;
+ if (font_name.to_lower() == "sans-serif") {
+ font_name = "Helvetica";
+ } else if (font_name.to_lower() == "serif") {
+ font_name = "Times";
+ } else if (font_name.to_lower() == "monospace") {
+ font_name = "Courier";
+ } else if (font_name.to_lower() == "fantasy") {
+ font_name = "Papyrus";
+ } else if (font_name.to_lower() == "cursive") {
+ font_name = "Apple Chancery";
+ };
+
+ CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, font_name.utf8().get_data(), kCFStringEncodingUTF8);
+
+ CTFontSymbolicTraits traits = 0;
+ if (p_bold) {
+ traits |= kCTFontBoldTrait;
+ }
+ if (p_italic) {
+ traits |= kCTFontItalicTrait;
+ }
+
+ CFNumberRef sym_traits = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &traits);
+ CFMutableDictionaryRef traits_dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, nullptr, nullptr);
+ CFDictionaryAddValue(traits_dict, kCTFontSymbolicTrait, sym_traits);
+
+ CFMutableDictionaryRef attributes = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, nullptr, nullptr);
+ CFDictionaryAddValue(attributes, kCTFontFamilyNameAttribute, name);
+ CFDictionaryAddValue(attributes, kCTFontTraitsAttribute, traits_dict);
+
+ CTFontDescriptorRef font = CTFontDescriptorCreateWithAttributes(attributes);
+ if (font) {
+ CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(font, kCTFontURLAttribute);
+ if (url) {
+ NSString *font_path = [NSString stringWithString:[(__bridge NSURL *)url path]];
+ ret = String::utf8([font_path UTF8String]);
+ CFRelease(url);
+ }
+ CFRelease(font);
+ }
+
+ CFRelease(attributes);
+ CFRelease(traits_dict);
+ CFRelease(sym_traits);
+ CFRelease(name);
+
+ return ret;
+}
+
String OS_MacOS::get_executable_path() const {
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
int pid = getpid();
diff --git a/platform/uwp/export/app_packager.h b/platform/uwp/export/app_packager.h
index effe96ae67..18db3eb806 100644
--- a/platform/uwp/export/app_packager.h
+++ b/platform/uwp/export/app_packager.h
@@ -40,7 +40,7 @@
#include "core/io/zip_io.h"
#include "core/object/class_db.h"
#include "core/version.h"
-#include "editor/editor_export.h"
+#include "editor/export/editor_export_platform.h"
#include "thirdparty/minizip/unzip.h"
#include "thirdparty/minizip/zip.h"
diff --git a/platform/uwp/export/export_plugin.h b/platform/uwp/export/export_plugin.h
index 02dbcb726b..c1a1f8a935 100644
--- a/platform/uwp/export/export_plugin.h
+++ b/platform/uwp/export/export_plugin.h
@@ -39,9 +39,9 @@
#include "core/io/zip_io.h"
#include "core/object/class_db.h"
#include "core/version.h"
-#include "editor/editor_export.h"
#include "editor/editor_node.h"
#include "editor/editor_paths.h"
+#include "editor/export/editor_export_platform.h"
#include "thirdparty/minizip/unzip.h"
#include "thirdparty/minizip/zip.h"
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 6a7caf4656..dd2df1f004 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -270,6 +270,7 @@ def configure_msvc(env, manual_msvc_config):
"bcrypt",
"Avrt",
"dwmapi",
+ "dwrite",
]
if env["vulkan"]:
@@ -441,6 +442,7 @@ def configure_mingw(env):
"avrt",
"uuid",
"dwmapi",
+ "dwrite",
]
)
diff --git a/platform/windows/export/export.cpp b/platform/windows/export/export.cpp
index af19f24f09..20320470b8 100644
--- a/platform/windows/export/export.cpp
+++ b/platform/windows/export/export.cpp
@@ -30,6 +30,7 @@
#include "export.h"
+#include "editor/export/editor_export.h"
#include "export_plugin.h"
void register_windows_exporter() {
diff --git a/platform/windows/export/export_plugin.h b/platform/windows/export/export_plugin.h
index bb8d6a15f2..b9e59829a0 100644
--- a/platform/windows/export/export_plugin.h
+++ b/platform/windows/export/export_plugin.h
@@ -33,8 +33,8 @@
#include "core/io/file_access.h"
#include "core/os/os.h"
-#include "editor/editor_export.h"
#include "editor/editor_settings.h"
+#include "editor/export/editor_export_platform_pc.h"
#include "platform/windows/logo.gen.h"
class EditorExportPlatformWindows : public EditorExportPlatformPC {
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index b5423e62bf..ad4be950cc 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -48,6 +48,7 @@
#include <avrt.h>
#include <bcrypt.h>
#include <direct.h>
+#include <dwrite.h>
#include <knownfolders.h>
#include <process.h>
#include <regstr.h>
@@ -621,6 +622,135 @@ Error OS_Windows::set_cwd(const String &p_cwd) {
return OK;
}
+Vector<String> OS_Windows::get_system_fonts() const {
+ Vector<String> ret;
+ HashSet<String> font_names;
+
+ ComAutoreleaseRef<IDWriteFactory> dwrite_factory;
+ HRESULT hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown **>(&dwrite_factory.reference));
+ ERR_FAIL_COND_V(FAILED(hr) || dwrite_factory.is_null(), ret);
+
+ ComAutoreleaseRef<IDWriteFontCollection> font_collection;
+ hr = dwrite_factory->GetSystemFontCollection(&font_collection.reference, false);
+ ERR_FAIL_COND_V(FAILED(hr) || font_collection.is_null(), ret);
+
+ UINT32 family_count = font_collection->GetFontFamilyCount();
+ for (UINT32 i = 0; i < family_count; i++) {
+ ComAutoreleaseRef<IDWriteFontFamily> family;
+ hr = font_collection->GetFontFamily(i, &family.reference);
+ ERR_CONTINUE(FAILED(hr) || family.is_null());
+
+ ComAutoreleaseRef<IDWriteLocalizedStrings> family_names;
+ hr = family->GetFamilyNames(&family_names.reference);
+ ERR_CONTINUE(FAILED(hr) || family_names.is_null());
+
+ UINT32 index = 0;
+ BOOL exists = false;
+ UINT32 length = 0;
+ Char16String name;
+
+ hr = family_names->FindLocaleName(L"en-us", &index, &exists);
+ ERR_CONTINUE(FAILED(hr));
+
+ hr = family_names->GetStringLength(index, &length);
+ ERR_CONTINUE(FAILED(hr));
+
+ name.resize(length + 1);
+ hr = family_names->GetString(index, (WCHAR *)name.ptrw(), length + 1);
+ ERR_CONTINUE(FAILED(hr));
+
+ font_names.insert(String::utf16(name.ptr(), length));
+ }
+
+ for (const String &E : font_names) {
+ ret.push_back(E);
+ }
+ return ret;
+}
+
+String OS_Windows::get_system_font_path(const String &p_font_name, bool p_bold, bool p_italic) const {
+ String font_name = p_font_name;
+ if (font_name.to_lower() == "sans-serif") {
+ font_name = "Arial";
+ } else if (font_name.to_lower() == "serif") {
+ font_name = "Times New Roman";
+ } else if (font_name.to_lower() == "monospace") {
+ font_name = "Courier New";
+ } else if (font_name.to_lower() == "cursive") {
+ font_name = "Comic Sans MS";
+ } else if (font_name.to_lower() == "fantasy") {
+ font_name = "Gabriola";
+ }
+
+ ComAutoreleaseRef<IDWriteFactory> dwrite_factory;
+ HRESULT hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown **>(&dwrite_factory.reference));
+ ERR_FAIL_COND_V(FAILED(hr) || dwrite_factory.is_null(), String());
+
+ ComAutoreleaseRef<IDWriteFontCollection> font_collection;
+ hr = dwrite_factory->GetSystemFontCollection(&font_collection.reference, false);
+ ERR_FAIL_COND_V(FAILED(hr) || font_collection.is_null(), String());
+
+ UINT32 index = 0;
+ BOOL exists = false;
+ font_collection->FindFamilyName((const WCHAR *)font_name.utf16().get_data(), &index, &exists);
+ if (FAILED(hr)) {
+ return String();
+ }
+
+ ComAutoreleaseRef<IDWriteFontFamily> family;
+ hr = font_collection->GetFontFamily(index, &family.reference);
+ if (FAILED(hr) || family.is_null()) {
+ return String();
+ }
+
+ ComAutoreleaseRef<IDWriteFont> dwrite_font;
+ hr = family->GetFirstMatchingFont(p_bold ? DWRITE_FONT_WEIGHT_BOLD : DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STRETCH_NORMAL, p_italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL, &dwrite_font.reference);
+ if (FAILED(hr) || dwrite_font.is_null()) {
+ return String();
+ }
+
+ ComAutoreleaseRef<IDWriteFontFace> dwrite_face;
+ hr = dwrite_font->CreateFontFace(&dwrite_face.reference);
+ if (FAILED(hr) || dwrite_face.is_null()) {
+ return String();
+ }
+
+ UINT32 number_of_files = 0;
+ hr = dwrite_face->GetFiles(&number_of_files, nullptr);
+ if (FAILED(hr)) {
+ return String();
+ }
+ Vector<ComAutoreleaseRef<IDWriteFontFile>> files;
+ files.resize(number_of_files);
+ hr = dwrite_face->GetFiles(&number_of_files, (IDWriteFontFile **)files.ptrw());
+ if (FAILED(hr)) {
+ return String();
+ }
+
+ for (UINT32 i = 0; i < number_of_files; i++) {
+ void const *reference_key = nullptr;
+ UINT32 reference_key_size = 0;
+ ComAutoreleaseRef<IDWriteLocalFontFileLoader> loader;
+
+ hr = files.write[i]->GetLoader((IDWriteFontFileLoader **)&loader.reference);
+ if (FAILED(hr) || loader.is_null()) {
+ continue;
+ }
+ hr = files.write[i]->GetReferenceKey(&reference_key, &reference_key_size);
+ if (FAILED(hr)) {
+ continue;
+ }
+
+ WCHAR file_path[MAX_PATH];
+ hr = loader->GetFilePathFromKey(reference_key, reference_key_size, &file_path[0], MAX_PATH);
+ if (FAILED(hr)) {
+ continue;
+ }
+ return String::utf16((const char16_t *)&file_path[0]);
+ }
+ return String();
+}
+
String OS_Windows::get_executable_path() const {
WCHAR bufname[4096];
GetModuleFileNameW(nullptr, bufname, 4096);
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index 7d2d4ae705..80fc860738 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -62,6 +62,26 @@
#define WINDOWS_DEBUG_OUTPUT_ENABLED
#endif
+template <class T>
+class ComAutoreleaseRef {
+public:
+ T *reference = nullptr;
+
+ _FORCE_INLINE_ T *operator->() { return reference; }
+ _FORCE_INLINE_ const T *operator->() const { return reference; }
+ _FORCE_INLINE_ T *operator*() { return reference; }
+ _FORCE_INLINE_ const T *operator*() const { return reference; }
+ _FORCE_INLINE_ bool is_valid() const { return reference != nullptr; }
+ _FORCE_INLINE_ bool is_null() const { return reference == nullptr; }
+ ComAutoreleaseRef() {}
+ ~ComAutoreleaseRef() {
+ if (reference != nullptr) {
+ reference->Release();
+ reference = nullptr;
+ }
+ }
+};
+
class JoypadWindows;
class OS_Windows : public OS {
#ifdef STDOUT_FILE
@@ -147,6 +167,9 @@ public:
virtual String get_environment(const String &p_var) const override;
virtual bool set_environment(const String &p_var, const String &p_value) const override;
+ virtual Vector<String> get_system_fonts() const override;
+ virtual String get_system_font_path(const String &p_font_name, bool p_bold = false, bool p_italic = false) const override;
+
virtual String get_executable_path() const override;
virtual String get_locale() const override;
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index cf8b6b8f94..5ba8c95a06 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -2652,7 +2652,7 @@ void TileMap::clear_layer(int p_layer) {
// Remove all tiles.
_clear_layer_internals(p_layer);
layers[p_layer].tile_map.clear();
-
+ _recreate_layer_internals(p_layer);
used_rect_cache_dirty = true;
}
@@ -2662,6 +2662,7 @@ void TileMap::clear() {
for (unsigned int i = 0; i < layers.size(); i++) {
layers[i].tile_map.clear();
}
+ _recreate_internals();
used_rect_cache_dirty = true;
}
diff --git a/scene/3d/decal.cpp b/scene/3d/decal.cpp
index 01cab493ec..0112f24e0c 100644
--- a/scene/3d/decal.cpp
+++ b/scene/3d/decal.cpp
@@ -215,11 +215,13 @@ void Decal::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_cull_mask"), &Decal::get_cull_mask);
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,suffix:m"), "set_extents", "get_extents");
+
ADD_GROUP("Textures", "texture_");
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_albedo", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_ALBEDO);
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_normal", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_NORMAL);
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_orm", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_ORM);
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_emission", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_EMISSION);
+
ADD_GROUP("Parameters", "");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "emission_energy", PROPERTY_HINT_RANGE, "0,128,0.01"), "set_emission_energy", "get_emission_energy");
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate");
@@ -227,13 +229,16 @@ void Decal::_bind_methods() {
// A Normal Fade of 1.0 causes the decal to be invisible even if fully perpendicular to a surface.
// Due to this, limit Normal Fade to 0.999.
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "normal_fade", PROPERTY_HINT_RANGE, "0,0.999,0.001"), "set_normal_fade", "get_normal_fade");
+
ADD_GROUP("Vertical Fade", "");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "upper_fade", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_upper_fade", "get_upper_fade");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "lower_fade", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_lower_fade", "get_lower_fade");
+
ADD_GROUP("Distance Fade", "distance_fade_");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "distance_fade_enabled"), "set_enable_distance_fade", "is_distance_fade_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_begin", PROPERTY_HINT_NONE, "suffix:m"), "set_distance_fade_begin", "get_distance_fade_begin");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_length", PROPERTY_HINT_NONE, "suffix:m"), "set_distance_fade_length", "get_distance_fade_length");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_distance_fade_begin", "get_distance_fade_begin");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_length", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_distance_fade_length", "get_distance_fade_length");
+
ADD_GROUP("Cull Mask", "");
ADD_PROPERTY(PropertyInfo(Variant::INT, "cull_mask", PROPERTY_HINT_LAYERS_3D_RENDER), "set_cull_mask", "get_cull_mask");
diff --git a/scene/3d/decal.h b/scene/3d/decal.h
index d5990272c6..38da4c14e3 100644
--- a/scene/3d/decal.h
+++ b/scene/3d/decal.h
@@ -57,8 +57,8 @@ private:
real_t upper_fade = 0.3;
real_t lower_fade = 0.3;
bool distance_fade_enabled = false;
- real_t distance_fade_begin = 10.0;
- real_t distance_fade_length = 1.0;
+ real_t distance_fade_begin = 40.0;
+ real_t distance_fade_length = 10.0;
protected:
static void _bind_methods();
diff --git a/scene/3d/joint_3d.cpp b/scene/3d/joint_3d.cpp
index 0b824ef28b..b0509475a7 100644
--- a/scene/3d/joint_3d.cpp
+++ b/scene/3d/joint_3d.cpp
@@ -737,7 +737,8 @@ void Generic6DOFJoint3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_flag_z", "flag", "value"), &Generic6DOFJoint3D::set_flag_z);
ClassDB::bind_method(D_METHOD("get_flag_z", "flag"), &Generic6DOFJoint3D::get_flag_z);
- // X
+ ADD_GROUP("Linear Limit", "linear_limit_");
+
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_LIMIT);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_x", "get_param_x", PARAM_LINEAR_UPPER_LIMIT);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_x", "get_param_x", PARAM_LINEAR_LOWER_LIMIT);
@@ -745,15 +746,53 @@ void Generic6DOFJoint3D::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_x", "get_param_x", PARAM_LINEAR_RESTITUTION);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_x", "get_param_x", PARAM_LINEAR_DAMPING);
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_y", "get_param_y", PARAM_LINEAR_UPPER_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_y", "get_param_y", PARAM_LINEAR_LOWER_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_LIMIT_SOFTNESS);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_RESTITUTION);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_DAMPING);
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_z", "get_param_z", PARAM_LINEAR_UPPER_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_z", "get_param_z", PARAM_LINEAR_LOWER_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_LIMIT_SOFTNESS);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_RESTITUTION);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_DAMPING);
+
+ ADD_GROUP("Linear Motor", "linear_motor_");
+
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_MOTOR);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_x/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_x", "get_param_x", PARAM_LINEAR_MOTOR_TARGET_VELOCITY);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_x/force_limit"), "set_param_x", "get_param_x", PARAM_LINEAR_MOTOR_FORCE_LIMIT);
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_MOTOR);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_TARGET_VELOCITY);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/force_limit"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_FORCE_LIMIT);
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_MOTOR);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_TARGET_VELOCITY);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/force_limit"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_FORCE_LIMIT);
+
+ ADD_GROUP("Linear Spring", "linear_spring_");
+
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_SPRING);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_STIFFNESS);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_x/damping"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_DAMPING);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_x/equilibrium_point"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT);
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_SPRING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_STIFFNESS);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/damping"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_DAMPING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT);
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_SPRING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_STIFFNESS);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/damping"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_DAMPING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/equilibrium_point"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT);
+
+ ADD_GROUP("Angular Limit", "angular_limit_");
+
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_limit_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_ANGULAR_LIMIT);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_x/upper_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_hi_limit_x", "_get_angular_hi_limit_x");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_x/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_x", "_get_angular_lo_limit_x");
@@ -763,68 +802,15 @@ void Generic6DOFJoint3D::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_x/force_limit"), "set_param_x", "get_param_x", PARAM_ANGULAR_FORCE_LIMIT);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_x/erp"), "set_param_x", "get_param_x", PARAM_ANGULAR_ERP);
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_MOTOR);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_x/target_velocity"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_x/force_limit"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_FORCE_LIMIT);
-
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_ANGULAR_SPRING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_STIFFNESS);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/damping"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_DAMPING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/equilibrium_point"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT);
-
- // Y
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_LIMIT);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_y", "get_param_y", PARAM_LINEAR_UPPER_LIMIT);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_y", "get_param_y", PARAM_LINEAR_LOWER_LIMIT);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_LIMIT_SOFTNESS);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_RESTITUTION);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_DAMPING);
-
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_MOTOR);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_TARGET_VELOCITY);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/force_limit"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_FORCE_LIMIT);
-
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_SPRING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_STIFFNESS);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/damping"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_DAMPING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT);
-
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_limit_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_ANGULAR_LIMIT);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_y/upper_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_hi_limit_y", "_get_angular_hi_limit_y");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_y/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_y", "_get_angular_lo_limit_y");
-
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_ANGULAR_LIMIT_SOFTNESS);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_ANGULAR_RESTITUTION);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_ANGULAR_DAMPING);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/force_limit"), "set_param_y", "get_param_y", PARAM_ANGULAR_FORCE_LIMIT);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/erp"), "set_param_y", "get_param_y", PARAM_ANGULAR_ERP);
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_MOTOR);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_y/target_velocity"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_y/force_limit"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_FORCE_LIMIT);
-
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_ANGULAR_SPRING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_STIFFNESS);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/damping"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_DAMPING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT);
-
- // Z
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_LIMIT);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_z", "get_param_z", PARAM_LINEAR_UPPER_LIMIT);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_z", "get_param_z", PARAM_LINEAR_LOWER_LIMIT);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_LIMIT_SOFTNESS);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_RESTITUTION);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_DAMPING);
-
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_MOTOR);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_TARGET_VELOCITY);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/force_limit"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_FORCE_LIMIT);
-
- ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_SPRING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_STIFFNESS);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/damping"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_DAMPING);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/equilibrium_point"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT);
-
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_limit_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_ANGULAR_LIMIT);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_z/upper_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_hi_limit_z", "_get_angular_hi_limit_z");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_z/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_z", "_get_angular_lo_limit_z");
@@ -834,10 +820,32 @@ void Generic6DOFJoint3D::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_z/force_limit"), "set_param_z", "get_param_z", PARAM_ANGULAR_FORCE_LIMIT);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_z/erp"), "set_param_z", "get_param_z", PARAM_ANGULAR_ERP);
+ ADD_GROUP("Angular Motor", "angular_motor_");
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_MOTOR);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_x/target_velocity"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_x/force_limit"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_FORCE_LIMIT);
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_MOTOR);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_y/target_velocity"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_y/force_limit"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_FORCE_LIMIT);
+
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_MOTOR);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_z/target_velocity"), "set_param_z", "get_param_z", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_z/force_limit"), "set_param_z", "get_param_z", PARAM_ANGULAR_MOTOR_FORCE_LIMIT);
+ ADD_GROUP("Angular Spring", "angular_spring_");
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_ANGULAR_SPRING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_STIFFNESS);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/damping"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_DAMPING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/equilibrium_point"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT);
+
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_ANGULAR_SPRING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_STIFFNESS);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/damping"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_DAMPING);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT);
+
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_ANGULAR_SPRING);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_STIFFNESS);
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_z/damping"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_DAMPING);
diff --git a/scene/3d/visual_instance_3d.cpp b/scene/3d/visual_instance_3d.cpp
index 69917f6992..e76e85cfef 100644
--- a/scene/3d/visual_instance_3d.cpp
+++ b/scene/3d/visual_instance_3d.cpp
@@ -461,15 +461,16 @@ void GeometryInstance3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "extra_cull_margin", PROPERTY_HINT_RANGE, "0,16384,0.01,suffix:m"), "set_extra_cull_margin", "get_extra_cull_margin");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "lod_bias", PROPERTY_HINT_RANGE, "0.001,128,0.001"), "set_lod_bias", "get_lod_bias");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ignore_occlusion_culling"), "set_ignore_occlusion_culling", "is_ignoring_occlusion_culling");
+
ADD_GROUP("Global Illumination", "gi_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "gi_mode", PROPERTY_HINT_ENUM, "Disabled,Static (VoxelGI/SDFGI/LightmapGI),Dynamic (VoxelGI only)"), "set_gi_mode", "get_gi_mode");
ADD_PROPERTY(PropertyInfo(Variant::INT, "gi_lightmap_scale", PROPERTY_HINT_ENUM, String::utf8("1×,2×,4×,8×")), "set_lightmap_scale", "get_lightmap_scale");
ADD_GROUP("Visibility Range", "visibility_range_");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_begin", "get_visibility_range_begin");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_begin_margin", "get_visibility_range_begin_margin");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_end", "get_visibility_range_end");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_end_margin", "get_visibility_range_end_margin");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_begin", "get_visibility_range_begin");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_begin_margin", "get_visibility_range_begin_margin");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_end", "get_visibility_range_end");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_end_margin", "get_visibility_range_end_margin");
ADD_PROPERTY(PropertyInfo(Variant::INT, "visibility_range_fade_mode", PROPERTY_HINT_ENUM, "Disabled,Self,Dependencies"), "set_visibility_range_fade_mode", "get_visibility_range_fade_mode");
BIND_ENUM_CONSTANT(SHADOW_CASTING_SETTING_OFF);
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 686045901c..242684b2a8 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -50,6 +50,9 @@
#include "editor/plugins/control_editor_plugin.h"
#endif
+// Editor plugin interoperability.
+
+// TODO: Decouple controls from their editor plugin and get rid of this.
#ifdef TOOLS_ENABLED
Dictionary Control::_edit_get_state() const {
Dictionary s;
@@ -181,6 +184,49 @@ Size2 Control::_edit_get_minimum_size() const {
}
#endif
+// Editor integration.
+
+void Control::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const {
+ Node::get_argument_options(p_function, p_idx, r_options);
+
+ if (p_idx == 0) {
+ List<StringName> sn;
+ String pf = p_function;
+ if (pf == "add_theme_color_override" || pf == "has_theme_color" || pf == "has_theme_color_override" || pf == "get_theme_color") {
+ Theme::get_default()->get_color_list(get_class(), &sn);
+ } else if (pf == "add_theme_style_override" || pf == "has_theme_style" || pf == "has_theme_style_override" || pf == "get_theme_style") {
+ Theme::get_default()->get_stylebox_list(get_class(), &sn);
+ } else if (pf == "add_theme_font_override" || pf == "has_theme_font" || pf == "has_theme_font_override" || pf == "get_theme_font") {
+ Theme::get_default()->get_font_list(get_class(), &sn);
+ } else if (pf == "add_theme_font_size_override" || pf == "has_theme_font_size" || pf == "has_theme_font_size_override" || pf == "get_theme_font_size") {
+ Theme::get_default()->get_font_size_list(get_class(), &sn);
+ } else if (pf == "add_theme_constant_override" || pf == "has_theme_constant" || pf == "has_theme_constant_override" || pf == "get_theme_constant") {
+ Theme::get_default()->get_constant_list(get_class(), &sn);
+ }
+
+ sn.sort_custom<StringName::AlphCompare>();
+ for (const StringName &name : sn) {
+ r_options->push_back(String(name).quote());
+ }
+ }
+}
+
+TypedArray<String> Control::get_configuration_warnings() const {
+ TypedArray<String> warnings = Node::get_configuration_warnings();
+
+ if (data.mouse_filter == MOUSE_FILTER_IGNORE && !data.tooltip.is_empty()) {
+ warnings.push_back(RTR("The Hint Tooltip won't be displayed as the control's Mouse Filter is set to \"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."));
+ }
+
+ return warnings;
+}
+
+bool Control::is_text_field() const {
+ return false;
+}
+
+// Dynamic properties.
+
String Control::properties_managed_by_container[] = {
"offset_left",
"offset_top",
@@ -196,58 +242,6 @@ String Control::properties_managed_by_container[] = {
"size"
};
-void Control::accept_event() {
- if (is_inside_tree()) {
- get_viewport()->_gui_accept_event();
- }
-}
-
-void Control::set_custom_minimum_size(const Size2 &p_custom) {
- if (p_custom == data.custom_minimum_size) {
- return;
- }
- data.custom_minimum_size = p_custom;
- update_minimum_size();
-}
-
-Size2 Control::get_custom_minimum_size() const {
- return data.custom_minimum_size;
-}
-
-void Control::_update_minimum_size_cache() {
- Size2 minsize = get_minimum_size();
- minsize.x = MAX(minsize.x, data.custom_minimum_size.x);
- minsize.y = MAX(minsize.y, data.custom_minimum_size.y);
-
- bool size_changed = false;
- if (data.minimum_size_cache != minsize) {
- size_changed = true;
- }
-
- data.minimum_size_cache = minsize;
- data.minimum_size_valid = true;
-
- if (size_changed) {
- update_minimum_size();
- }
-}
-
-Size2 Control::get_combined_minimum_size() const {
- if (!data.minimum_size_valid) {
- const_cast<Control *>(this)->_update_minimum_size_cache();
- }
- return data.minimum_size_cache;
-}
-
-Transform2D Control::_get_internal_transform() const {
- Transform2D rot_scale;
- rot_scale.set_rotation_and_scale(data.rotation, data.scale);
- Transform2D offset;
- offset.set_origin(-data.pivot_offset);
-
- return offset.affine_inverse() * (rot_scale * offset);
-}
-
bool Control::_set(const StringName &p_name, const Variant &p_value) {
String name = p_name;
if (!name.begins_with("theme_override")) {
@@ -258,21 +252,21 @@ bool Control::_set(const StringName &p_name, const Variant &p_value) {
if (name.begins_with("theme_override_icons/")) {
String dname = name.get_slicec('/', 1);
if (data.icon_override.has(dname)) {
- data.icon_override[dname]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+ data.icon_override[dname]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
}
data.icon_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED);
} else if (name.begins_with("theme_override_styles/")) {
String dname = name.get_slicec('/', 1);
if (data.style_override.has(dname)) {
- data.style_override[dname]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+ data.style_override[dname]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
}
data.style_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED);
} else if (name.begins_with("theme_override_fonts/")) {
String dname = name.get_slicec('/', 1);
if (data.font_override.has(dname)) {
- data.font_override[dname]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+ data.font_override[dname]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
}
data.font_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED);
@@ -318,21 +312,6 @@ bool Control::_set(const StringName &p_name, const Variant &p_value) {
return true;
}
-void Control::_update_minimum_size() {
- if (!is_inside_tree()) {
- return;
- }
-
- Size2 minsize = get_combined_minimum_size();
- data.updating_last_minimum_size = false;
-
- if (minsize != data.last_minimum_size) {
- data.last_minimum_size = minsize;
- _size_changed();
- emit_signal(SceneStringNames::get_singleton()->minimum_size_changed);
- }
-}
-
bool Control::_get(const StringName &p_name, Variant &r_ret) const {
String sname = p_name;
if (!sname.begins_with("theme_override")) {
@@ -586,6 +565,12 @@ void Control::_validate_property(PropertyInfo &property) const {
}
}
+// Global relations.
+
+bool Control::is_top_level_control() const {
+ return is_inside_tree() && (!data.parent_canvas_item && !data.RI && is_set_as_top_level());
+}
+
Control *Control::get_parent_control() const {
return data.parent;
}
@@ -594,97 +579,64 @@ Window *Control::get_parent_window() const {
return data.parent_window;
}
-void Control::set_layout_direction(Control::LayoutDirection p_direction) {
- ERR_FAIL_INDEX((int)p_direction, 4);
-
- data.layout_dir = p_direction;
- data.is_rtl_dirty = true;
-
- propagate_notification(NOTIFICATION_LAYOUT_DIRECTION_CHANGED);
-}
+Control *Control::get_root_parent_control() const {
+ const CanvasItem *ci = this;
+ const Control *root = this;
-Control::LayoutDirection Control::get_layout_direction() const {
- return data.layout_dir;
-}
+ while (ci) {
+ const Control *c = Object::cast_to<Control>(ci);
+ if (c) {
+ root = c;
-bool Control::is_layout_rtl() const {
- if (data.is_rtl_dirty) {
- const_cast<Control *>(this)->data.is_rtl_dirty = false;
- if (data.layout_dir == LAYOUT_DIRECTION_INHERITED) {
- Window *parent_window = get_parent_window();
- Control *parent_control = get_parent_control();
- if (parent_control) {
- const_cast<Control *>(this)->data.is_rtl = parent_control->is_layout_rtl();
- } else if (parent_window) {
- const_cast<Control *>(this)->data.is_rtl = parent_window->is_layout_rtl();
- } else {
- if (GLOBAL_GET(SNAME("internationalization/rendering/force_right_to_left_layout_direction"))) {
- const_cast<Control *>(this)->data.is_rtl = true;
- } else {
- String locale = TranslationServer::get_singleton()->get_tool_locale();
- const_cast<Control *>(this)->data.is_rtl = TS->is_locale_right_to_left(locale);
- }
- }
- } else if (data.layout_dir == LAYOUT_DIRECTION_LOCALE) {
- if (GLOBAL_GET(SNAME("internationalization/rendering/force_right_to_left_layout_direction"))) {
- const_cast<Control *>(this)->data.is_rtl = true;
- } else {
- String locale = TranslationServer::get_singleton()->get_tool_locale();
- const_cast<Control *>(this)->data.is_rtl = TS->is_locale_right_to_left(locale);
+ if (c->data.RI || c->is_top_level_control()) {
+ break;
}
- } else {
- const_cast<Control *>(this)->data.is_rtl = (data.layout_dir == LAYOUT_DIRECTION_RTL);
}
- }
- return data.is_rtl;
-}
-void Control::set_auto_translate(bool p_enable) {
- if (p_enable == data.auto_translate) {
- return;
+ ci = ci->get_parent_item();
}
- data.auto_translate = p_enable;
-
- notification(MainLoop::NOTIFICATION_TRANSLATION_CHANGED);
-}
-
-bool Control::is_auto_translating() const {
- return data.auto_translate;
-}
-
-void Control::_clear_size_warning() {
- data.size_warning = false;
+ return const_cast<Control *>(root);
}
-//moved theme configuration here, so controls can set up even if still not inside active scene
-
-void Control::add_child_notify(Node *p_child) {
- Control *child_c = Object::cast_to<Control>(p_child);
-
- if (child_c && child_c->data.theme.is_null() && (data.theme_owner || data.theme_owner_window)) {
- _propagate_theme_changed(child_c, data.theme_owner, data.theme_owner_window); //need to propagate here, since many controls may require setting up stuff
+Rect2 Control::get_parent_anchorable_rect() const {
+ if (!is_inside_tree()) {
+ return Rect2();
}
- Window *child_w = Object::cast_to<Window>(p_child);
+ Rect2 parent_rect;
+ if (data.parent_canvas_item) {
+ parent_rect = data.parent_canvas_item->get_anchorable_rect();
+ } else {
+#ifdef TOOLS_ENABLED
+ Node *edited_root = get_tree()->get_edited_scene_root();
+ if (edited_root && (this == edited_root || edited_root->is_ancestor_of(this))) {
+ parent_rect.size = Size2(ProjectSettings::get_singleton()->get("display/window/size/viewport_width"), ProjectSettings::get_singleton()->get("display/window/size/viewport_height"));
+ } else {
+ parent_rect = get_viewport()->get_visible_rect();
+ }
- if (child_w && child_w->theme.is_null() && (data.theme_owner || data.theme_owner_window)) {
- _propagate_theme_changed(child_w, data.theme_owner, data.theme_owner_window); //need to propagate here, since many controls may require setting up stuff
+#else
+ parent_rect = get_viewport()->get_visible_rect();
+#endif
}
+
+ return parent_rect;
}
-void Control::remove_child_notify(Node *p_child) {
- Control *child_c = Object::cast_to<Control>(p_child);
+Size2 Control::get_parent_area_size() const {
+ return get_parent_anchorable_rect().size;
+}
- if (child_c && (child_c->data.theme_owner || child_c->data.theme_owner_window) && child_c->data.theme.is_null()) {
- _propagate_theme_changed(child_c, nullptr, nullptr);
- }
+// Positioning and sizing.
- Window *child_w = Object::cast_to<Window>(p_child);
+Transform2D Control::_get_internal_transform() const {
+ Transform2D rot_scale;
+ rot_scale.set_rotation_and_scale(data.rotation, data.scale);
+ Transform2D offset;
+ offset.set_origin(-data.pivot_offset);
- if (child_w && (child_w->theme_owner || child_w->theme_owner_window) && child_w->theme.is_null()) {
- _propagate_theme_changed(child_w, nullptr, nullptr);
- }
+ return offset.affine_inverse() * (rot_scale * offset);
}
void Control::_update_canvas_item_transform() {
@@ -699,815 +651,146 @@ void Control::_update_canvas_item_transform() {
RenderingServer::get_singleton()->canvas_item_set_transform(get_canvas_item(), xform);
}
-void Control::_notification(int p_notification) {
- switch (p_notification) {
- case NOTIFICATION_POST_ENTER_TREE: {
- data.minimum_size_valid = false;
- data.is_rtl_dirty = true;
- _size_changed();
- } break;
-
- case NOTIFICATION_EXIT_TREE: {
- release_focus();
- get_viewport()->_gui_remove_control(this);
- } break;
-
- case NOTIFICATION_READY: {
-#ifdef DEBUG_ENABLED
- connect("ready", callable_mp(this, &Control::_clear_size_warning), varray(), CONNECT_DEFERRED | CONNECT_ONESHOT);
-#endif
- } break;
-
- case NOTIFICATION_ENTER_CANVAS: {
- data.parent = Object::cast_to<Control>(get_parent());
- data.parent_window = Object::cast_to<Window>(get_parent());
- data.is_rtl_dirty = true;
-
- if (data.theme.is_null()) {
- if (data.parent && (data.parent->data.theme_owner || data.parent->data.theme_owner_window)) {
- data.theme_owner = data.parent->data.theme_owner;
- data.theme_owner_window = data.parent->data.theme_owner_window;
- notification(NOTIFICATION_THEME_CHANGED);
- } else if (data.parent_window && (data.parent_window->theme_owner || data.parent_window->theme_owner_window)) {
- data.theme_owner = data.parent_window->theme_owner;
- data.theme_owner_window = data.parent_window->theme_owner_window;
- notification(NOTIFICATION_THEME_CHANGED);
- }
- }
-
- CanvasItem *node = this;
- bool has_parent_control = false;
-
- while (!node->is_set_as_top_level()) {
- CanvasItem *parent = Object::cast_to<CanvasItem>(node->get_parent());
- if (!parent) {
- break;
- }
-
- Control *parent_control = Object::cast_to<Control>(parent);
- if (parent_control) {
- has_parent_control = true;
- break;
- }
-
- node = parent;
- }
-
- if (has_parent_control) {
- // Do nothing, has a parent control.
- } else {
- // Is a regular root control or top_level.
- Viewport *viewport = get_viewport();
- ERR_FAIL_COND(!viewport);
- data.RI = viewport->_gui_add_root_control(this);
- }
-
- data.parent_canvas_item = get_parent_item();
-
- if (data.parent_canvas_item) {
- data.parent_canvas_item->connect("item_rect_changed", callable_mp(this, &Control::_size_changed));
- } else {
- // Connect viewport.
- Viewport *viewport = get_viewport();
- ERR_FAIL_COND(!viewport);
- viewport->connect("size_changed", callable_mp(this, &Control::_size_changed));
- }
- } break;
-
- case NOTIFICATION_EXIT_CANVAS: {
- if (data.parent_canvas_item) {
- data.parent_canvas_item->disconnect("item_rect_changed", callable_mp(this, &Control::_size_changed));
- data.parent_canvas_item = nullptr;
- } else if (!is_set_as_top_level()) {
- //disconnect viewport
- Viewport *viewport = get_viewport();
- ERR_FAIL_COND(!viewport);
- viewport->disconnect("size_changed", callable_mp(this, &Control::_size_changed));
- }
-
- if (data.RI) {
- get_viewport()->_gui_remove_root_control(data.RI);
- data.RI = nullptr;
- }
-
- data.parent = nullptr;
- data.parent_canvas_item = nullptr;
- data.parent_window = nullptr;
- data.is_rtl_dirty = true;
- } break;
-
- case NOTIFICATION_MOVED_IN_PARENT: {
- // some parents need to know the order of the children to draw (like TabContainer)
- // update if necessary
- if (data.parent) {
- data.parent->update();
- }
- update();
-
- if (data.RI) {
- get_viewport()->_gui_set_root_order_dirty();
- }
- } break;
-
- case NOTIFICATION_RESIZED: {
- emit_signal(SceneStringNames::get_singleton()->resized);
- } break;
-
- case NOTIFICATION_DRAW: {
- _update_canvas_item_transform();
- RenderingServer::get_singleton()->canvas_item_set_custom_rect(get_canvas_item(), !data.disable_visibility_clip, Rect2(Point2(), get_size()));
- RenderingServer::get_singleton()->canvas_item_set_clip(get_canvas_item(), data.clip_contents);
- } break;
-
- case NOTIFICATION_MOUSE_ENTER: {
- emit_signal(SceneStringNames::get_singleton()->mouse_entered);
- } break;
-
- case NOTIFICATION_MOUSE_EXIT: {
- emit_signal(SceneStringNames::get_singleton()->mouse_exited);
- } break;
-
- case NOTIFICATION_FOCUS_ENTER: {
- emit_signal(SceneStringNames::get_singleton()->focus_entered);
- update();
- } break;
-
- case NOTIFICATION_FOCUS_EXIT: {
- emit_signal(SceneStringNames::get_singleton()->focus_exited);
- update();
- } break;
-
- case NOTIFICATION_THEME_CHANGED: {
- update_minimum_size();
- update();
- } break;
-
- case NOTIFICATION_VISIBILITY_CHANGED: {
- if (!is_visible_in_tree()) {
- if (get_viewport() != nullptr) {
- get_viewport()->_gui_hide_control(this);
- }
- } else {
- data.minimum_size_valid = false;
- _update_minimum_size();
- _size_changed();
- }
- } break;
-
- case NOTIFICATION_TRANSLATION_CHANGED:
- case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: {
- if (is_inside_tree()) {
- data.is_rtl_dirty = true;
- _size_changed();
- }
- } break;
- }
-}
-
-bool Control::has_point(const Point2 &p_point) const {
- bool ret;
- if (GDVIRTUAL_CALL(_has_point, p_point, ret)) {
- return ret;
- }
- return Rect2(Point2(), get_size()).has_point(p_point);
-}
-
-void Control::set_drag_forwarding(Object *p_target) {
- if (p_target) {
- data.drag_owner = p_target->get_instance_id();
- } else {
- data.drag_owner = ObjectID();
- }
-}
-
-Variant Control::get_drag_data(const Point2 &p_point) {
- if (data.drag_owner.is_valid()) {
- Object *obj = ObjectDB::get_instance(data.drag_owner);
- if (obj) {
- return obj->call("_get_drag_data_fw", p_point, this);
- }
- }
-
- Variant dd;
- if (GDVIRTUAL_CALL(_get_drag_data, p_point, dd)) {
- return dd;
- }
-
- return Variant();
-}
-
-bool Control::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
- if (data.drag_owner.is_valid()) {
- Object *obj = ObjectDB::get_instance(data.drag_owner);
- if (obj) {
- return obj->call("_can_drop_data_fw", p_point, p_data, this);
- }
- }
-
- bool ret;
- if (GDVIRTUAL_CALL(_can_drop_data, p_point, p_data, ret)) {
- return ret;
- }
- return false;
-}
-
-void Control::drop_data(const Point2 &p_point, const Variant &p_data) {
- if (data.drag_owner.is_valid()) {
- Object *obj = ObjectDB::get_instance(data.drag_owner);
- if (obj) {
- obj->call("_drop_data_fw", p_point, p_data, this);
- return;
- }
- }
-
- GDVIRTUAL_CALL(_drop_data, p_point, p_data);
-}
-
-void Control::force_drag(const Variant &p_data, Control *p_control) {
- ERR_FAIL_COND(!is_inside_tree());
- ERR_FAIL_COND(p_data.get_type() == Variant::NIL);
-
- get_viewport()->_gui_force_drag(this, p_data, p_control);
-}
-
-void Control::set_drag_preview(Control *p_control) {
- ERR_FAIL_COND(!is_inside_tree());
- ERR_FAIL_COND(!get_viewport()->gui_is_dragging());
- get_viewport()->_gui_set_drag_preview(this, p_control);
-}
-
-bool Control::is_drag_successful() const {
- return is_inside_tree() && get_viewport()->gui_is_drag_successful();
-}
-
-void Control::_call_gui_input(const Ref<InputEvent> &p_event) {
- emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); //signal should be first, so it's possible to override an event (and then accept it)
- if (!is_inside_tree() || get_viewport()->is_input_handled()) {
- return; //input was handled, abort
- }
- GDVIRTUAL_CALL(_gui_input, p_event);
- if (!is_inside_tree() || get_viewport()->is_input_handled()) {
- return; //input was handled, abort
- }
- gui_input(p_event);
-}
-void Control::gui_input(const Ref<InputEvent> &p_event) {
-}
-
-Size2 Control::get_minimum_size() const {
- Vector2 ms;
- if (GDVIRTUAL_CALL(_get_minimum_size, ms)) {
- return ms;
- }
- return Vector2();
+Transform2D Control::get_transform() const {
+ Transform2D xform = _get_internal_transform();
+ xform[2] += get_position();
+ return xform;
}
-template <class T>
-T Control::get_theme_item_in_types(Control *p_theme_owner, Window *p_theme_owner_window, Theme::DataType p_data_type, const StringName &p_name, List<StringName> p_theme_types) {
- ERR_FAIL_COND_V_MSG(p_theme_types.size() == 0, T(), "At least one theme type must be specified.");
-
- // First, look through each control or window node in the branch, until no valid parent can be found.
- // Only nodes with a theme resource attached are considered.
- Control *theme_owner = p_theme_owner;
- Window *theme_owner_window = p_theme_owner_window;
-
- while (theme_owner || theme_owner_window) {
- // For each theme resource check the theme types provided and see if p_name exists with any of them.
- for (const StringName &E : p_theme_types) {
- if (theme_owner && theme_owner->data.theme->has_theme_item(p_data_type, p_name, E)) {
- return theme_owner->data.theme->get_theme_item(p_data_type, p_name, E);
- }
-
- if (theme_owner_window && theme_owner_window->theme->has_theme_item(p_data_type, p_name, E)) {
- return theme_owner_window->theme->get_theme_item(p_data_type, p_name, E);
- }
- }
-
- Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
- Control *parent_c = Object::cast_to<Control>(parent);
- if (parent_c) {
- theme_owner = parent_c->data.theme_owner;
- theme_owner_window = parent_c->data.theme_owner_window;
- } else {
- Window *parent_w = Object::cast_to<Window>(parent);
- if (parent_w) {
- theme_owner = parent_w->theme_owner;
- theme_owner_window = parent_w->theme_owner_window;
- } else {
- theme_owner = nullptr;
- theme_owner_window = nullptr;
- }
- }
- }
-
- // Secondly, check the project-defined Theme resource.
- if (Theme::get_project_default().is_valid()) {
- for (const StringName &E : p_theme_types) {
- if (Theme::get_project_default()->has_theme_item(p_data_type, p_name, E)) {
- return Theme::get_project_default()->get_theme_item(p_data_type, p_name, E);
- }
- }
- }
+/// Anchors and offsets.
- // Lastly, fall back on the items defined in the default Theme, if they exist.
- for (const StringName &E : p_theme_types) {
- if (Theme::get_default()->has_theme_item(p_data_type, p_name, E)) {
- return Theme::get_default()->get_theme_item(p_data_type, p_name, E);
- }
- }
- // If they don't exist, use any type to return the default/empty value.
- return Theme::get_default()->get_theme_item(p_data_type, p_name, p_theme_types[0]);
+void Control::_set_anchor(Side p_side, real_t p_anchor) {
+ set_anchor(p_side, p_anchor);
}
-bool Control::has_theme_item_in_types(Control *p_theme_owner, Window *p_theme_owner_window, Theme::DataType p_data_type, const StringName &p_name, List<StringName> p_theme_types) {
- ERR_FAIL_COND_V_MSG(p_theme_types.size() == 0, false, "At least one theme type must be specified.");
-
- // First, look through each control or window node in the branch, until no valid parent can be found.
- // Only nodes with a theme resource attached are considered.
- Control *theme_owner = p_theme_owner;
- Window *theme_owner_window = p_theme_owner_window;
-
- while (theme_owner || theme_owner_window) {
- // For each theme resource check the theme types provided and see if p_name exists with any of them.
- for (const StringName &E : p_theme_types) {
- if (theme_owner && theme_owner->data.theme->has_theme_item(p_data_type, p_name, E)) {
- return true;
- }
-
- if (theme_owner_window && theme_owner_window->theme->has_theme_item(p_data_type, p_name, E)) {
- return true;
- }
- }
-
- Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
- Control *parent_c = Object::cast_to<Control>(parent);
- if (parent_c) {
- theme_owner = parent_c->data.theme_owner;
- theme_owner_window = parent_c->data.theme_owner_window;
- } else {
- Window *parent_w = Object::cast_to<Window>(parent);
- if (parent_w) {
- theme_owner = parent_w->theme_owner;
- theme_owner_window = parent_w->theme_owner_window;
- } else {
- theme_owner = nullptr;
- theme_owner_window = nullptr;
- }
- }
- }
+void Control::set_anchor(Side p_side, real_t p_anchor, bool p_keep_offset, bool p_push_opposite_anchor) {
+ ERR_FAIL_INDEX((int)p_side, 4);
- // Secondly, check the project-defined Theme resource.
- if (Theme::get_project_default().is_valid()) {
- for (const StringName &E : p_theme_types) {
- if (Theme::get_project_default()->has_theme_item(p_data_type, p_name, E)) {
- return true;
- }
- }
- }
+ Rect2 parent_rect = get_parent_anchorable_rect();
+ real_t parent_range = (p_side == SIDE_LEFT || p_side == SIDE_RIGHT) ? parent_rect.size.x : parent_rect.size.y;
+ real_t previous_pos = data.offset[p_side] + data.anchor[p_side] * parent_range;
+ real_t previous_opposite_pos = data.offset[(p_side + 2) % 4] + data.anchor[(p_side + 2) % 4] * parent_range;
- // Lastly, fall back on the items defined in the default Theme, if they exist.
- for (const StringName &E : p_theme_types) {
- if (Theme::get_default()->has_theme_item(p_data_type, p_name, E)) {
- return true;
- }
- }
- return false;
-}
+ data.anchor[p_side] = p_anchor;
-void Control::_get_theme_type_dependencies(const StringName &p_theme_type, List<StringName> *p_list) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (Theme::get_project_default().is_valid() && Theme::get_project_default()->get_type_variation_base(data.theme_type_variation) != StringName()) {
- Theme::get_project_default()->get_type_dependencies(get_class_name(), data.theme_type_variation, p_list);
+ if (((p_side == SIDE_LEFT || p_side == SIDE_TOP) && data.anchor[p_side] > data.anchor[(p_side + 2) % 4]) ||
+ ((p_side == SIDE_RIGHT || p_side == SIDE_BOTTOM) && data.anchor[p_side] < data.anchor[(p_side + 2) % 4])) {
+ if (p_push_opposite_anchor) {
+ data.anchor[(p_side + 2) % 4] = data.anchor[p_side];
} else {
- Theme::get_default()->get_type_dependencies(get_class_name(), data.theme_type_variation, p_list);
- }
- } else {
- Theme::get_default()->get_type_dependencies(p_theme_type, StringName(), p_list);
- }
-}
-
-Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- const Ref<Texture2D> *tex = data.icon_override.getptr(p_name);
- if (tex) {
- return *tex;
- }
- }
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return get_theme_item_in_types<Ref<Texture2D>>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_ICON, p_name, theme_types);
-}
-
-Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- const Ref<StyleBox> *style = data.style_override.getptr(p_name);
- if (style) {
- return *style;
- }
- }
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return get_theme_item_in_types<Ref<StyleBox>>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_STYLEBOX, p_name, theme_types);
-}
-
-Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- const Ref<Font> *font = data.font_override.getptr(p_name);
- if (font) {
- return *font;
- }
- }
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return get_theme_item_in_types<Ref<Font>>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT, p_name, theme_types);
-}
-
-int Control::get_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- const int *font_size = data.font_size_override.getptr(p_name);
- if (font_size && (*font_size) > 0) {
- return *font_size;
+ data.anchor[p_side] = data.anchor[(p_side + 2) % 4];
}
}
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return get_theme_item_in_types<int>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT_SIZE, p_name, theme_types);
-}
-
-Color Control::get_theme_color(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- const Color *color = data.color_override.getptr(p_name);
- if (color) {
- return *color;
+ if (!p_keep_offset) {
+ data.offset[p_side] = previous_pos - data.anchor[p_side] * parent_range;
+ if (p_push_opposite_anchor) {
+ data.offset[(p_side + 2) % 4] = previous_opposite_pos - data.anchor[(p_side + 2) % 4] * parent_range;
}
}
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return get_theme_item_in_types<Color>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_COLOR, p_name, theme_types);
-}
-
-int Control::get_theme_constant(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- const int *constant = data.constant_override.getptr(p_name);
- if (constant) {
- return *constant;
- }
+ if (is_inside_tree()) {
+ _size_changed();
}
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return get_theme_item_in_types<int>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_CONSTANT, p_name, theme_types);
-}
-
-bool Control::has_theme_icon_override(const StringName &p_name) const {
- const Ref<Texture2D> *tex = data.icon_override.getptr(p_name);
- return tex != nullptr;
-}
-
-bool Control::has_theme_stylebox_override(const StringName &p_name) const {
- const Ref<StyleBox> *style = data.style_override.getptr(p_name);
- return style != nullptr;
-}
-
-bool Control::has_theme_font_override(const StringName &p_name) const {
- const Ref<Font> *font = data.font_override.getptr(p_name);
- return font != nullptr;
-}
-
-bool Control::has_theme_font_size_override(const StringName &p_name) const {
- const int *font_size = data.font_size_override.getptr(p_name);
- return font_size != nullptr;
-}
-
-bool Control::has_theme_color_override(const StringName &p_name) const {
- const Color *color = data.color_override.getptr(p_name);
- return color != nullptr;
-}
-
-bool Control::has_theme_constant_override(const StringName &p_name) const {
- const int *constant = data.constant_override.getptr(p_name);
- return constant != nullptr;
+ update();
}
-bool Control::has_theme_icon(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (has_theme_icon_override(p_name)) {
- return true;
- }
- }
+real_t Control::get_anchor(Side p_side) const {
+ ERR_FAIL_INDEX_V(int(p_side), 4, 0.0);
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_ICON, p_name, theme_types);
+ return data.anchor[p_side];
}
-bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (has_theme_stylebox_override(p_name)) {
- return true;
- }
- }
+void Control::set_offset(Side p_side, real_t p_value) {
+ ERR_FAIL_INDEX((int)p_side, 4);
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_STYLEBOX, p_name, theme_types);
+ data.offset[p_side] = p_value;
+ _size_changed();
}
-bool Control::has_theme_font(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (has_theme_font_override(p_name)) {
- return true;
- }
- }
+real_t Control::get_offset(Side p_side) const {
+ ERR_FAIL_INDEX_V((int)p_side, 4, 0);
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT, p_name, theme_types);
+ return data.offset[p_side];
}
-bool Control::has_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (has_theme_font_size_override(p_name)) {
- return true;
- }
- }
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT_SIZE, p_name, theme_types);
+void Control::set_anchor_and_offset(Side p_side, real_t p_anchor, real_t p_pos, bool p_push_opposite_anchor) {
+ set_anchor(p_side, p_anchor, false, p_push_opposite_anchor);
+ set_offset(p_side, p_pos);
}
-bool Control::has_theme_color(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (has_theme_color_override(p_name)) {
- return true;
- }
- }
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_COLOR, p_name, theme_types);
+void Control::set_begin(const Size2 &p_point) {
+ data.offset[0] = p_point.x;
+ data.offset[1] = p_point.y;
+ _size_changed();
}
-bool Control::has_theme_constant(const StringName &p_name, const StringName &p_theme_type) const {
- if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
- if (has_theme_constant_override(p_name)) {
- return true;
- }
- }
-
- List<StringName> theme_types;
- _get_theme_type_dependencies(p_theme_type, &theme_types);
- return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_CONSTANT, p_name, theme_types);
+Size2 Control::get_begin() const {
+ return Size2(data.offset[0], data.offset[1]);
}
-float Control::fetch_theme_default_base_scale(Control *p_theme_owner, Window *p_theme_owner_window) {
- // First, look through each control or window node in the branch, until no valid parent can be found.
- // Only nodes with a theme resource attached are considered.
- // For each theme resource see if their assigned theme has the default value defined and valid.
- Control *theme_owner = p_theme_owner;
- Window *theme_owner_window = p_theme_owner_window;
-
- while (theme_owner || theme_owner_window) {
- if (theme_owner && theme_owner->data.theme->has_default_base_scale()) {
- return theme_owner->data.theme->get_default_base_scale();
- }
-
- if (theme_owner_window && theme_owner_window->theme->has_default_base_scale()) {
- return theme_owner_window->theme->get_default_base_scale();
- }
-
- Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
- Control *parent_c = Object::cast_to<Control>(parent);
- if (parent_c) {
- theme_owner = parent_c->data.theme_owner;
- theme_owner_window = parent_c->data.theme_owner_window;
- } else {
- Window *parent_w = Object::cast_to<Window>(parent);
- if (parent_w) {
- theme_owner = parent_w->theme_owner;
- theme_owner_window = parent_w->theme_owner_window;
- } else {
- theme_owner = nullptr;
- theme_owner_window = nullptr;
- }
- }
- }
-
- // Secondly, check the project-defined Theme resource.
- if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_default_base_scale()) {
- return Theme::get_project_default()->get_default_base_scale();
- }
- }
-
- // Lastly, fall back on the default Theme.
- if (Theme::get_default()->has_default_base_scale()) {
- return Theme::get_default()->get_default_base_scale();
- }
- return Theme::get_fallback_base_scale();
+void Control::set_end(const Size2 &p_point) {
+ data.offset[2] = p_point.x;
+ data.offset[3] = p_point.y;
+ _size_changed();
}
-float Control::get_theme_default_base_scale() const {
- return fetch_theme_default_base_scale(data.theme_owner, data.theme_owner_window);
+Size2 Control::get_end() const {
+ return Size2(data.offset[2], data.offset[3]);
}
-Ref<Font> Control::fetch_theme_default_font(Control *p_theme_owner, Window *p_theme_owner_window) {
- // First, look through each control or window node in the branch, until no valid parent can be found.
- // Only nodes with a theme resource attached are considered.
- // For each theme resource see if their assigned theme has the default value defined and valid.
- Control *theme_owner = p_theme_owner;
- Window *theme_owner_window = p_theme_owner_window;
-
- while (theme_owner || theme_owner_window) {
- if (theme_owner && theme_owner->data.theme->has_default_font()) {
- return theme_owner->data.theme->get_default_font();
- }
-
- if (theme_owner_window && theme_owner_window->theme->has_default_font()) {
- return theme_owner_window->theme->get_default_font();
- }
-
- Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
- Control *parent_c = Object::cast_to<Control>(parent);
- if (parent_c) {
- theme_owner = parent_c->data.theme_owner;
- theme_owner_window = parent_c->data.theme_owner_window;
- } else {
- Window *parent_w = Object::cast_to<Window>(parent);
- if (parent_w) {
- theme_owner = parent_w->theme_owner;
- theme_owner_window = parent_w->theme_owner_window;
- } else {
- theme_owner = nullptr;
- theme_owner_window = nullptr;
- }
- }
- }
-
- // Secondly, check the project-defined Theme resource.
- if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_default_font()) {
- return Theme::get_project_default()->get_default_font();
- }
- }
+void Control::set_h_grow_direction(GrowDirection p_direction) {
+ ERR_FAIL_INDEX((int)p_direction, 3);
- // Lastly, fall back on the default Theme.
- if (Theme::get_default()->has_default_font()) {
- return Theme::get_default()->get_default_font();
- }
- return Theme::get_fallback_font();
+ data.h_grow = p_direction;
+ _size_changed();
}
-Ref<Font> Control::get_theme_default_font() const {
- return fetch_theme_default_font(data.theme_owner, data.theme_owner_window);
+Control::GrowDirection Control::get_h_grow_direction() const {
+ return data.h_grow;
}
-int Control::fetch_theme_default_font_size(Control *p_theme_owner, Window *p_theme_owner_window) {
- // First, look through each control or window node in the branch, until no valid parent can be found.
- // Only nodes with a theme resource attached are considered.
- // For each theme resource see if their assigned theme has the default value defined and valid.
- Control *theme_owner = p_theme_owner;
- Window *theme_owner_window = p_theme_owner_window;
-
- while (theme_owner || theme_owner_window) {
- if (theme_owner && theme_owner->data.theme->has_default_font_size()) {
- return theme_owner->data.theme->get_default_font_size();
- }
-
- if (theme_owner_window && theme_owner_window->theme->has_default_font_size()) {
- return theme_owner_window->theme->get_default_font_size();
- }
-
- Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
- Control *parent_c = Object::cast_to<Control>(parent);
- if (parent_c) {
- theme_owner = parent_c->data.theme_owner;
- theme_owner_window = parent_c->data.theme_owner_window;
- } else {
- Window *parent_w = Object::cast_to<Window>(parent);
- if (parent_w) {
- theme_owner = parent_w->theme_owner;
- theme_owner_window = parent_w->theme_owner_window;
- } else {
- theme_owner = nullptr;
- theme_owner_window = nullptr;
- }
- }
- }
-
- // Secondly, check the project-defined Theme resource.
- if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_default_font_size()) {
- return Theme::get_project_default()->get_default_font_size();
- }
- }
+void Control::set_v_grow_direction(GrowDirection p_direction) {
+ ERR_FAIL_INDEX((int)p_direction, 3);
- // Lastly, fall back on the default Theme.
- if (Theme::get_default()->has_default_font_size()) {
- return Theme::get_default()->get_default_font_size();
- }
- return Theme::get_fallback_font_size();
+ data.v_grow = p_direction;
+ _size_changed();
}
-int Control::get_theme_default_font_size() const {
- return fetch_theme_default_font_size(data.theme_owner, data.theme_owner_window);
+Control::GrowDirection Control::get_v_grow_direction() const {
+ return data.v_grow;
}
-Rect2 Control::get_parent_anchorable_rect() const {
- if (!is_inside_tree()) {
- return Rect2();
- }
-
- Rect2 parent_rect;
- if (data.parent_canvas_item) {
- parent_rect = data.parent_canvas_item->get_anchorable_rect();
- } else {
-#ifdef TOOLS_ENABLED
- Node *edited_root = get_tree()->get_edited_scene_root();
- if (edited_root && (this == edited_root || edited_root->is_ancestor_of(this))) {
- parent_rect.size = Size2(ProjectSettings::get_singleton()->get("display/window/size/viewport_width"), ProjectSettings::get_singleton()->get("display/window/size/viewport_height"));
- } else {
- parent_rect = get_viewport()->get_visible_rect();
- }
+void Control::_compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]) {
+ Size2 parent_rect_size = get_parent_anchorable_rect().size;
+ ERR_FAIL_COND(parent_rect_size.x == 0.0);
+ ERR_FAIL_COND(parent_rect_size.y == 0.0);
-#else
- parent_rect = get_viewport()->get_visible_rect();
-#endif
+ real_t x = p_rect.position.x;
+ if (is_layout_rtl()) {
+ x = parent_rect_size.x - x - p_rect.size.x;
}
-
- return parent_rect;
-}
-
-Size2 Control::get_parent_area_size() const {
- return get_parent_anchorable_rect().size;
+ r_anchors[0] = (x - p_offsets[0]) / parent_rect_size.x;
+ r_anchors[1] = (p_rect.position.y - p_offsets[1]) / parent_rect_size.y;
+ r_anchors[2] = (x + p_rect.size.x - p_offsets[2]) / parent_rect_size.x;
+ r_anchors[3] = (p_rect.position.y + p_rect.size.y - p_offsets[3]) / parent_rect_size.y;
}
-void Control::_size_changed() {
- Rect2 parent_rect = get_parent_anchorable_rect();
-
- real_t edge_pos[4];
-
- for (int i = 0; i < 4; i++) {
- real_t area = parent_rect.size[i & 1];
- edge_pos[i] = data.offset[i] + (data.anchor[i] * area);
- }
-
- Point2 new_pos_cache = Point2(edge_pos[0], edge_pos[1]);
- Size2 new_size_cache = Point2(edge_pos[2], edge_pos[3]) - new_pos_cache;
-
- Size2 minimum_size = get_combined_minimum_size();
-
- if (minimum_size.width > new_size_cache.width) {
- if (data.h_grow == GROW_DIRECTION_BEGIN) {
- new_pos_cache.x += new_size_cache.width - minimum_size.width;
- } else if (data.h_grow == GROW_DIRECTION_BOTH) {
- new_pos_cache.x += 0.5 * (new_size_cache.width - minimum_size.width);
- }
-
- new_size_cache.width = minimum_size.width;
- }
+void Control::_compute_offsets(Rect2 p_rect, const real_t p_anchors[4], real_t (&r_offsets)[4]) {
+ Size2 parent_rect_size = get_parent_anchorable_rect().size;
+ real_t x = p_rect.position.x;
if (is_layout_rtl()) {
- new_pos_cache.x = parent_rect.size.x - new_pos_cache.x - new_size_cache.x;
- }
-
- if (minimum_size.height > new_size_cache.height) {
- if (data.v_grow == GROW_DIRECTION_BEGIN) {
- new_pos_cache.y += new_size_cache.height - minimum_size.height;
- } else if (data.v_grow == GROW_DIRECTION_BOTH) {
- new_pos_cache.y += 0.5 * (new_size_cache.height - minimum_size.height);
- }
-
- new_size_cache.height = minimum_size.height;
- }
-
- bool pos_changed = new_pos_cache != data.pos_cache;
- bool size_changed = new_size_cache != data.size_cache;
-
- data.pos_cache = new_pos_cache;
- data.size_cache = new_size_cache;
-
- if (is_inside_tree()) {
- if (size_changed) {
- notification(NOTIFICATION_RESIZED);
- }
- if (pos_changed || size_changed) {
- item_rect_changed(size_changed);
- _notify_transform();
- }
-
- if (pos_changed && !size_changed) {
- _update_canvas_item_transform(); //move because it won't be updated
- }
+ x = parent_rect_size.x - x - p_rect.size.x;
}
+ r_offsets[0] = x - (p_anchors[0] * parent_rect_size.x);
+ r_offsets[1] = p_rect.position.y - (p_anchors[1] * parent_rect_size.y);
+ r_offsets[2] = x + p_rect.size.x - (p_anchors[2] * parent_rect_size.x);
+ r_offsets[3] = p_rect.position.y + p_rect.size.y - (p_anchors[3] * parent_rect_size.y);
}
+/// Presets and layout modes.
+
void Control::_set_layout_mode(LayoutMode p_mode) {
bool list_changed = false;
@@ -1557,47 +840,6 @@ Control::LayoutMode Control::_get_layout_mode() const {
return LayoutMode::LAYOUT_MODE_POSITION;
}
-void Control::set_anchor(Side p_side, real_t p_anchor, bool p_keep_offset, bool p_push_opposite_anchor) {
- ERR_FAIL_INDEX((int)p_side, 4);
-
- Rect2 parent_rect = get_parent_anchorable_rect();
- real_t parent_range = (p_side == SIDE_LEFT || p_side == SIDE_RIGHT) ? parent_rect.size.x : parent_rect.size.y;
- real_t previous_pos = data.offset[p_side] + data.anchor[p_side] * parent_range;
- real_t previous_opposite_pos = data.offset[(p_side + 2) % 4] + data.anchor[(p_side + 2) % 4] * parent_range;
-
- data.anchor[p_side] = p_anchor;
-
- if (((p_side == SIDE_LEFT || p_side == SIDE_TOP) && data.anchor[p_side] > data.anchor[(p_side + 2) % 4]) ||
- ((p_side == SIDE_RIGHT || p_side == SIDE_BOTTOM) && data.anchor[p_side] < data.anchor[(p_side + 2) % 4])) {
- if (p_push_opposite_anchor) {
- data.anchor[(p_side + 2) % 4] = data.anchor[p_side];
- } else {
- data.anchor[p_side] = data.anchor[(p_side + 2) % 4];
- }
- }
-
- if (!p_keep_offset) {
- data.offset[p_side] = previous_pos - data.anchor[p_side] * parent_range;
- if (p_push_opposite_anchor) {
- data.offset[(p_side + 2) % 4] = previous_opposite_pos - data.anchor[(p_side + 2) % 4] * parent_range;
- }
- }
- if (is_inside_tree()) {
- _size_changed();
- }
-
- update();
-}
-
-void Control::_set_anchor(Side p_side, real_t p_anchor) {
- set_anchor(p_side, p_anchor);
-}
-
-void Control::set_anchor_and_offset(Side p_side, real_t p_anchor, real_t p_pos, bool p_push_opposite_anchor) {
- set_anchor(p_side, p_anchor, false, p_push_opposite_anchor);
- set_offset(p_side, p_pos);
-}
-
void Control::_set_anchors_layout_preset(int p_preset) {
bool list_changed = false;
@@ -2037,43 +1279,37 @@ void Control::set_grow_direction_preset(LayoutPreset p_preset) {
}
}
-real_t Control::get_anchor(Side p_side) const {
- ERR_FAIL_INDEX_V(int(p_side), 4, 0.0);
+/// Manual positioning.
- return data.anchor[p_side];
+void Control::_set_position(const Size2 &p_point) {
+ set_position(p_point);
}
-void Control::set_offset(Side p_side, real_t p_value) {
- ERR_FAIL_INDEX((int)p_side, 4);
-
- data.offset[p_side] = p_value;
+void Control::set_position(const Size2 &p_point, bool p_keep_offsets) {
+ if (p_keep_offsets) {
+ _compute_anchors(Rect2(p_point, data.size_cache), data.offset, data.anchor);
+ } else {
+ _compute_offsets(Rect2(p_point, data.size_cache), data.anchor, data.offset);
+ }
_size_changed();
}
-void Control::set_begin(const Size2 &p_point) {
- data.offset[0] = p_point.x;
- data.offset[1] = p_point.y;
- _size_changed();
+Size2 Control::get_position() const {
+ return data.pos_cache;
}
-void Control::set_end(const Size2 &p_point) {
- data.offset[2] = p_point.x;
- data.offset[3] = p_point.y;
- _size_changed();
+void Control::_set_global_position(const Point2 &p_point) {
+ set_global_position(p_point);
}
-real_t Control::get_offset(Side p_side) const {
- ERR_FAIL_INDEX_V((int)p_side, 4, 0);
-
- return data.offset[p_side];
-}
+void Control::set_global_position(const Point2 &p_point, bool p_keep_offsets) {
+ Transform2D inv;
-Size2 Control::get_begin() const {
- return Size2(data.offset[0], data.offset[1]);
-}
+ if (data.parent_canvas_item) {
+ inv = data.parent_canvas_item->get_global_transform().affine_inverse();
+ }
-Size2 Control::get_end() const {
- return Size2(data.offset[2], data.offset[3]);
+ set_position(inv.xform(p_point), p_keep_offsets);
}
Point2 Control::get_global_position() const {
@@ -2091,72 +1327,6 @@ Point2 Control::get_screen_position() const {
return global_pos;
}
-void Control::_set_global_position(const Point2 &p_point) {
- set_global_position(p_point);
-}
-
-void Control::set_global_position(const Point2 &p_point, bool p_keep_offsets) {
- Transform2D inv;
-
- if (data.parent_canvas_item) {
- inv = data.parent_canvas_item->get_global_transform().affine_inverse();
- }
-
- set_position(inv.xform(p_point), p_keep_offsets);
-}
-
-void Control::_compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]) {
- Size2 parent_rect_size = get_parent_anchorable_rect().size;
- ERR_FAIL_COND(parent_rect_size.x == 0.0);
- ERR_FAIL_COND(parent_rect_size.y == 0.0);
-
- real_t x = p_rect.position.x;
- if (is_layout_rtl()) {
- x = parent_rect_size.x - x - p_rect.size.x;
- }
- r_anchors[0] = (x - p_offsets[0]) / parent_rect_size.x;
- r_anchors[1] = (p_rect.position.y - p_offsets[1]) / parent_rect_size.y;
- r_anchors[2] = (x + p_rect.size.x - p_offsets[2]) / parent_rect_size.x;
- r_anchors[3] = (p_rect.position.y + p_rect.size.y - p_offsets[3]) / parent_rect_size.y;
-}
-
-void Control::_compute_offsets(Rect2 p_rect, const real_t p_anchors[4], real_t (&r_offsets)[4]) {
- Size2 parent_rect_size = get_parent_anchorable_rect().size;
-
- real_t x = p_rect.position.x;
- if (is_layout_rtl()) {
- x = parent_rect_size.x - x - p_rect.size.x;
- }
- r_offsets[0] = x - (p_anchors[0] * parent_rect_size.x);
- r_offsets[1] = p_rect.position.y - (p_anchors[1] * parent_rect_size.y);
- r_offsets[2] = x + p_rect.size.x - (p_anchors[2] * parent_rect_size.x);
- r_offsets[3] = p_rect.position.y + p_rect.size.y - (p_anchors[3] * parent_rect_size.y);
-}
-
-void Control::_set_position(const Size2 &p_point) {
- set_position(p_point);
-}
-
-void Control::set_position(const Size2 &p_point, bool p_keep_offsets) {
- if (p_keep_offsets) {
- _compute_anchors(Rect2(p_point, data.size_cache), data.offset, data.anchor);
- } else {
- _compute_offsets(Rect2(p_point, data.size_cache), data.anchor, data.offset);
- }
- _size_changed();
-}
-
-void Control::set_rect(const Rect2 &p_rect) {
- for (int i = 0; i < 4; i++) {
- data.anchor[i] = ANCHOR_BEGIN;
- }
-
- _compute_offsets(p_rect, data.anchor, data.offset);
- if (is_inside_tree()) {
- _size_changed();
- }
-}
-
void Control::_set_size(const Size2 &p_size) {
#ifdef DEBUG_ENABLED
if (data.size_warning && (data.anchor[SIDE_LEFT] != data.anchor[SIDE_RIGHT] || data.anchor[SIDE_TOP] != data.anchor[SIDE_BOTTOM])) {
@@ -2184,10 +1354,6 @@ void Control::set_size(const Size2 &p_size, bool p_keep_offsets) {
_size_changed();
}
-Size2 Control::get_position() const {
- return data.pos_cache;
-}
-
Size2 Control::get_size() const {
return data.size_cache;
}
@@ -2196,6 +1362,21 @@ void Control::reset_size() {
set_size(Size2());
}
+void Control::set_rect(const Rect2 &p_rect) {
+ for (int i = 0; i < 4; i++) {
+ data.anchor[i] = ANCHOR_BEGIN;
+ }
+
+ _compute_offsets(p_rect, data.anchor, data.offset);
+ if (is_inside_tree()) {
+ _size_changed();
+ }
+}
+
+Rect2 Control::get_rect() const {
+ return Rect2(get_position(), get_size());
+}
+
Rect2 Control::get_global_rect() const {
return Rect2(get_global_position(), get_size());
}
@@ -2220,118 +1401,382 @@ Rect2 Control::get_window_rect() const {
return gr;
}
-Rect2 Control::get_rect() const {
- return Rect2(get_position(), get_size());
-}
-
Rect2 Control::get_anchorable_rect() const {
return Rect2(Point2(), get_size());
}
-void Control::begin_bulk_theme_override() {
- data.bulk_theme_override = true;
+void Control::set_scale(const Vector2 &p_scale) {
+ data.scale = p_scale;
+ // Avoid having 0 scale values, can lead to errors in physics and rendering.
+ if (data.scale.x == 0) {
+ data.scale.x = CMP_EPSILON;
+ }
+ if (data.scale.y == 0) {
+ data.scale.y = CMP_EPSILON;
+ }
+ update();
+ _notify_transform();
}
-void Control::end_bulk_theme_override() {
- ERR_FAIL_COND(!data.bulk_theme_override);
+Vector2 Control::get_scale() const {
+ return data.scale;
+}
- data.bulk_theme_override = false;
- _notify_theme_changed();
+void Control::set_rotation(real_t p_radians) {
+ data.rotation = p_radians;
+ update();
+ _notify_transform();
}
-void Control::add_theme_icon_override(const StringName &p_name, const Ref<Texture2D> &p_icon) {
- ERR_FAIL_COND(!p_icon.is_valid());
+real_t Control::get_rotation() const {
+ return data.rotation;
+}
- if (data.icon_override.has(p_name)) {
- data.icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+void Control::set_pivot_offset(const Vector2 &p_pivot) {
+ data.pivot_offset = p_pivot;
+ update();
+ _notify_transform();
+}
+
+Vector2 Control::get_pivot_offset() const {
+ return data.pivot_offset;
+}
+
+/// Sizes.
+
+void Control::_update_minimum_size() {
+ if (!is_inside_tree()) {
+ return;
}
- data.icon_override[p_name] = p_icon;
- data.icon_override[p_name]->connect("changed", callable_mp(this, &Control::_override_changed), Vector<Variant>(), CONNECT_REFERENCE_COUNTED);
- _notify_theme_changed();
+ Size2 minsize = get_combined_minimum_size();
+ data.updating_last_minimum_size = false;
+
+ if (minsize != data.last_minimum_size) {
+ data.last_minimum_size = minsize;
+ _size_changed();
+ emit_signal(SceneStringNames::get_singleton()->minimum_size_changed);
+ }
}
-void Control::add_theme_style_override(const StringName &p_name, const Ref<StyleBox> &p_style) {
- ERR_FAIL_COND(!p_style.is_valid());
+void Control::update_minimum_size() {
+ if (!is_inside_tree() || data.block_minimum_size_adjust) {
+ return;
+ }
- if (data.style_override.has(p_name)) {
- data.style_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+ Control *invalidate = this;
+
+ //invalidate cache upwards
+ while (invalidate && invalidate->data.minimum_size_valid) {
+ invalidate->data.minimum_size_valid = false;
+ if (invalidate->is_set_as_top_level()) {
+ break; // do not go further up
+ }
+ if (!invalidate->data.parent && get_parent()) {
+ Window *parent_window = Object::cast_to<Window>(get_parent());
+ if (parent_window && parent_window->is_wrapping_controls()) {
+ parent_window->child_controls_changed();
+ }
+ }
+ invalidate = invalidate->data.parent;
}
- data.style_override[p_name] = p_style;
- data.style_override[p_name]->connect("changed", callable_mp(this, &Control::_override_changed), Vector<Variant>(), CONNECT_REFERENCE_COUNTED);
- _notify_theme_changed();
+ if (!is_visible_in_tree()) {
+ return;
+ }
+
+ if (data.updating_last_minimum_size) {
+ return;
+ }
+
+ data.updating_last_minimum_size = true;
+
+ MessageQueue::get_singleton()->push_call(this, "_update_minimum_size");
}
-void Control::add_theme_font_override(const StringName &p_name, const Ref<Font> &p_font) {
- ERR_FAIL_COND(!p_font.is_valid());
+void Control::set_block_minimum_size_adjust(bool p_block) {
+ data.block_minimum_size_adjust = p_block;
+}
- if (data.font_override.has(p_name)) {
- data.font_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+bool Control::is_minimum_size_adjust_blocked() const {
+ return data.block_minimum_size_adjust;
+}
+
+Size2 Control::get_minimum_size() const {
+ Vector2 ms;
+ if (GDVIRTUAL_CALL(_get_minimum_size, ms)) {
+ return ms;
}
+ return Vector2();
+}
- data.font_override[p_name] = p_font;
- data.font_override[p_name]->connect("changed", callable_mp(this, &Control::_override_changed), Vector<Variant>(), CONNECT_REFERENCE_COUNTED);
- _notify_theme_changed();
+void Control::set_custom_minimum_size(const Size2 &p_custom) {
+ if (p_custom == data.custom_minimum_size) {
+ return;
+ }
+ data.custom_minimum_size = p_custom;
+ update_minimum_size();
}
-void Control::add_theme_font_size_override(const StringName &p_name, int p_font_size) {
- data.font_size_override[p_name] = p_font_size;
- _notify_theme_changed();
+Size2 Control::get_custom_minimum_size() const {
+ return data.custom_minimum_size;
}
-void Control::add_theme_color_override(const StringName &p_name, const Color &p_color) {
- data.color_override[p_name] = p_color;
- _notify_theme_changed();
+void Control::_update_minimum_size_cache() {
+ Size2 minsize = get_minimum_size();
+ minsize.x = MAX(minsize.x, data.custom_minimum_size.x);
+ minsize.y = MAX(minsize.y, data.custom_minimum_size.y);
+
+ bool size_changed = false;
+ if (data.minimum_size_cache != minsize) {
+ size_changed = true;
+ }
+
+ data.minimum_size_cache = minsize;
+ data.minimum_size_valid = true;
+
+ if (size_changed) {
+ update_minimum_size();
+ }
}
-void Control::add_theme_constant_override(const StringName &p_name, int p_constant) {
- data.constant_override[p_name] = p_constant;
- _notify_theme_changed();
+Size2 Control::get_combined_minimum_size() const {
+ if (!data.minimum_size_valid) {
+ const_cast<Control *>(this)->_update_minimum_size_cache();
+ }
+ return data.minimum_size_cache;
}
-void Control::remove_theme_icon_override(const StringName &p_name) {
- if (data.icon_override.has(p_name)) {
- data.icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+void Control::_size_changed() {
+ Rect2 parent_rect = get_parent_anchorable_rect();
+
+ real_t edge_pos[4];
+
+ for (int i = 0; i < 4; i++) {
+ real_t area = parent_rect.size[i & 1];
+ edge_pos[i] = data.offset[i] + (data.anchor[i] * area);
}
- data.icon_override.erase(p_name);
- _notify_theme_changed();
+ Point2 new_pos_cache = Point2(edge_pos[0], edge_pos[1]);
+ Size2 new_size_cache = Point2(edge_pos[2], edge_pos[3]) - new_pos_cache;
+
+ Size2 minimum_size = get_combined_minimum_size();
+
+ if (minimum_size.width > new_size_cache.width) {
+ if (data.h_grow == GROW_DIRECTION_BEGIN) {
+ new_pos_cache.x += new_size_cache.width - minimum_size.width;
+ } else if (data.h_grow == GROW_DIRECTION_BOTH) {
+ new_pos_cache.x += 0.5 * (new_size_cache.width - minimum_size.width);
+ }
+
+ new_size_cache.width = minimum_size.width;
+ }
+
+ if (is_layout_rtl()) {
+ new_pos_cache.x = parent_rect.size.x - new_pos_cache.x - new_size_cache.x;
+ }
+
+ if (minimum_size.height > new_size_cache.height) {
+ if (data.v_grow == GROW_DIRECTION_BEGIN) {
+ new_pos_cache.y += new_size_cache.height - minimum_size.height;
+ } else if (data.v_grow == GROW_DIRECTION_BOTH) {
+ new_pos_cache.y += 0.5 * (new_size_cache.height - minimum_size.height);
+ }
+
+ new_size_cache.height = minimum_size.height;
+ }
+
+ bool pos_changed = new_pos_cache != data.pos_cache;
+ bool size_changed = new_size_cache != data.size_cache;
+
+ data.pos_cache = new_pos_cache;
+ data.size_cache = new_size_cache;
+
+ if (is_inside_tree()) {
+ if (size_changed) {
+ notification(NOTIFICATION_RESIZED);
+ }
+ if (pos_changed || size_changed) {
+ item_rect_changed(size_changed);
+ _notify_transform();
+ }
+
+ if (pos_changed && !size_changed) {
+ _update_canvas_item_transform(); //move because it won't be updated
+ }
+ }
}
-void Control::remove_theme_style_override(const StringName &p_name) {
- if (data.style_override.has(p_name)) {
- data.style_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+void Control::_clear_size_warning() {
+ data.size_warning = false;
+}
+
+// Container sizing.
+
+void Control::set_h_size_flags(int p_flags) {
+ if (data.h_size_flags == p_flags) {
+ return;
}
+ data.h_size_flags = p_flags;
+ emit_signal(SceneStringNames::get_singleton()->size_flags_changed);
+}
- data.style_override.erase(p_name);
- _notify_theme_changed();
+int Control::get_h_size_flags() const {
+ return data.h_size_flags;
}
-void Control::remove_theme_font_override(const StringName &p_name) {
- if (data.font_override.has(p_name)) {
- data.font_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
+void Control::set_v_size_flags(int p_flags) {
+ if (data.v_size_flags == p_flags) {
+ return;
}
+ data.v_size_flags = p_flags;
+ emit_signal(SceneStringNames::get_singleton()->size_flags_changed);
+}
- data.font_override.erase(p_name);
- _notify_theme_changed();
+int Control::get_v_size_flags() const {
+ return data.v_size_flags;
}
-void Control::remove_theme_font_size_override(const StringName &p_name) {
- data.font_size_override.erase(p_name);
- _notify_theme_changed();
+void Control::set_stretch_ratio(real_t p_ratio) {
+ if (data.expand == p_ratio) {
+ return;
+ }
+
+ data.expand = p_ratio;
+ emit_signal(SceneStringNames::get_singleton()->size_flags_changed);
}
-void Control::remove_theme_color_override(const StringName &p_name) {
- data.color_override.erase(p_name);
- _notify_theme_changed();
+real_t Control::get_stretch_ratio() const {
+ return data.expand;
}
-void Control::remove_theme_constant_override(const StringName &p_name) {
- data.constant_override.erase(p_name);
- _notify_theme_changed();
+// Input events.
+
+void Control::_call_gui_input(const Ref<InputEvent> &p_event) {
+ emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); //signal should be first, so it's possible to override an event (and then accept it)
+ if (!is_inside_tree() || get_viewport()->is_input_handled()) {
+ return; //input was handled, abort
+ }
+ GDVIRTUAL_CALL(_gui_input, p_event);
+ if (!is_inside_tree() || get_viewport()->is_input_handled()) {
+ return; //input was handled, abort
+ }
+ gui_input(p_event);
+}
+
+void Control::gui_input(const Ref<InputEvent> &p_event) {
+}
+
+void Control::accept_event() {
+ if (is_inside_tree()) {
+ get_viewport()->_gui_accept_event();
+ }
+}
+
+bool Control::has_point(const Point2 &p_point) const {
+ bool ret;
+ if (GDVIRTUAL_CALL(_has_point, p_point, ret)) {
+ return ret;
+ }
+ return Rect2(Point2(), get_size()).has_point(p_point);
+}
+
+void Control::set_mouse_filter(MouseFilter p_filter) {
+ ERR_FAIL_INDEX(p_filter, 3);
+ data.mouse_filter = p_filter;
+ notify_property_list_changed();
+ update_configuration_warnings();
+}
+
+Control::MouseFilter Control::get_mouse_filter() const {
+ return data.mouse_filter;
+}
+
+void Control::set_force_pass_scroll_events(bool p_force_pass_scroll_events) {
+ data.force_pass_scroll_events = p_force_pass_scroll_events;
+}
+
+bool Control::is_force_pass_scroll_events() const {
+ return data.force_pass_scroll_events;
+}
+
+void Control::warp_mouse(const Point2 &p_position) {
+ ERR_FAIL_COND(!is_inside_tree());
+ get_viewport()->warp_mouse(get_global_transform_with_canvas().xform(p_position));
+}
+
+// Drag and drop handling.
+
+void Control::set_drag_forwarding(Object *p_target) {
+ if (p_target) {
+ data.drag_owner = p_target->get_instance_id();
+ } else {
+ data.drag_owner = ObjectID();
+ }
+}
+
+Variant Control::get_drag_data(const Point2 &p_point) {
+ if (data.drag_owner.is_valid()) {
+ Object *obj = ObjectDB::get_instance(data.drag_owner);
+ if (obj) {
+ return obj->call("_get_drag_data_fw", p_point, this);
+ }
+ }
+
+ Variant dd;
+ if (GDVIRTUAL_CALL(_get_drag_data, p_point, dd)) {
+ return dd;
+ }
+
+ return Variant();
+}
+
+bool Control::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
+ if (data.drag_owner.is_valid()) {
+ Object *obj = ObjectDB::get_instance(data.drag_owner);
+ if (obj) {
+ return obj->call("_can_drop_data_fw", p_point, p_data, this);
+ }
+ }
+
+ bool ret;
+ if (GDVIRTUAL_CALL(_can_drop_data, p_point, p_data, ret)) {
+ return ret;
+ }
+ return false;
+}
+
+void Control::drop_data(const Point2 &p_point, const Variant &p_data) {
+ if (data.drag_owner.is_valid()) {
+ Object *obj = ObjectDB::get_instance(data.drag_owner);
+ if (obj) {
+ obj->call("_drop_data_fw", p_point, p_data, this);
+ return;
+ }
+ }
+
+ GDVIRTUAL_CALL(_drop_data, p_point, p_data);
+}
+
+void Control::force_drag(const Variant &p_data, Control *p_control) {
+ ERR_FAIL_COND(!is_inside_tree());
+ ERR_FAIL_COND(p_data.get_type() == Variant::NIL);
+
+ get_viewport()->_gui_force_drag(this, p_data, p_control);
+}
+
+void Control::set_drag_preview(Control *p_control) {
+ ERR_FAIL_COND(!is_inside_tree());
+ ERR_FAIL_COND(!get_viewport()->gui_is_dragging());
+ get_viewport()->_gui_set_drag_preview(this, p_control);
+}
+
+bool Control::is_drag_successful() const {
+ return is_inside_tree() && get_viewport()->gui_is_drag_successful();
}
+// Focus.
+
void Control::set_focus_mode(FocusMode p_focus_mode) {
ERR_FAIL_INDEX((int)p_focus_mode, 3);
@@ -2342,6 +1787,41 @@ void Control::set_focus_mode(FocusMode p_focus_mode) {
data.focus_mode = p_focus_mode;
}
+Control::FocusMode Control::get_focus_mode() const {
+ return data.focus_mode;
+}
+
+bool Control::has_focus() const {
+ return is_inside_tree() && get_viewport()->_gui_control_has_focus(this);
+}
+
+void Control::grab_focus() {
+ ERR_FAIL_COND(!is_inside_tree());
+
+ if (data.focus_mode == FOCUS_NONE) {
+ WARN_PRINT("This control can't grab focus. Use set_focus_mode() to allow a control to get focus.");
+ return;
+ }
+
+ get_viewport()->_gui_control_grab_focus(this);
+}
+
+void Control::grab_click_focus() {
+ ERR_FAIL_COND(!is_inside_tree());
+
+ get_viewport()->_gui_grab_click_focus(this);
+}
+
+void Control::release_focus() {
+ ERR_FAIL_COND(!is_inside_tree());
+
+ if (!has_focus()) {
+ return;
+ }
+
+ get_viewport()->gui_release_focus();
+}
+
static Control *_next_control(Control *p_from) {
if (p_from->is_set_as_top_level()) {
return nullptr; // Can't go above.
@@ -2520,181 +2000,6 @@ Control *Control::find_prev_valid_focus() const {
return nullptr;
}
-Control::FocusMode Control::get_focus_mode() const {
- return data.focus_mode;
-}
-
-bool Control::has_focus() const {
- return is_inside_tree() && get_viewport()->_gui_control_has_focus(this);
-}
-
-void Control::grab_focus() {
- ERR_FAIL_COND(!is_inside_tree());
-
- if (data.focus_mode == FOCUS_NONE) {
- WARN_PRINT("This control can't grab focus. Use set_focus_mode() to allow a control to get focus.");
- return;
- }
-
- get_viewport()->_gui_control_grab_focus(this);
-}
-
-void Control::release_focus() {
- ERR_FAIL_COND(!is_inside_tree());
-
- if (!has_focus()) {
- return;
- }
-
- get_viewport()->gui_release_focus();
-}
-
-bool Control::is_top_level_control() const {
- return is_inside_tree() && (!data.parent_canvas_item && !data.RI && is_set_as_top_level());
-}
-
-void Control::_propagate_theme_changed(Node *p_at, Control *p_owner, Window *p_owner_window, bool p_assign) {
- Control *c = Object::cast_to<Control>(p_at);
-
- if (c && c != p_owner && c->data.theme.is_valid()) { // has a theme, this can't be propagated
- return;
- }
-
- Window *w = c == nullptr ? Object::cast_to<Window>(p_at) : nullptr;
-
- if (w && w != p_owner_window && w->theme.is_valid()) { // has a theme, this can't be propagated
- return;
- }
-
- for (int i = 0; i < p_at->get_child_count(); i++) {
- CanvasItem *child = Object::cast_to<CanvasItem>(p_at->get_child(i));
- if (child) {
- _propagate_theme_changed(child, p_owner, p_owner_window, p_assign);
- } else {
- Window *window = Object::cast_to<Window>(p_at->get_child(i));
- if (window) {
- _propagate_theme_changed(window, p_owner, p_owner_window, p_assign);
- }
- }
- }
-
- if (c) {
- if (p_assign) {
- c->data.theme_owner = p_owner;
- c->data.theme_owner_window = p_owner_window;
- }
- c->notification(Control::NOTIFICATION_THEME_CHANGED);
- c->emit_signal(SceneStringNames::get_singleton()->theme_changed);
- }
-
- if (w) {
- if (p_assign) {
- w->theme_owner = p_owner;
- w->theme_owner_window = p_owner_window;
- }
- w->notification(Window::NOTIFICATION_THEME_CHANGED);
- w->emit_signal(SceneStringNames::get_singleton()->theme_changed);
- }
-}
-
-void Control::_theme_changed() {
- _propagate_theme_changed(this, this, nullptr, false);
-}
-
-void Control::_notify_theme_changed() {
- if (!data.bulk_theme_override) {
- notification(NOTIFICATION_THEME_CHANGED);
- }
-}
-
-void Control::set_theme(const Ref<Theme> &p_theme) {
- if (data.theme == p_theme) {
- return;
- }
-
- if (data.theme.is_valid()) {
- data.theme->disconnect("changed", callable_mp(this, &Control::_theme_changed));
- }
-
- data.theme = p_theme;
- if (!p_theme.is_null()) {
- data.theme_owner = this;
- data.theme_owner_window = nullptr;
- _propagate_theme_changed(this, this, nullptr);
- } else {
- Control *parent_c = Object::cast_to<Control>(get_parent());
-
- if (parent_c && (parent_c->data.theme_owner || parent_c->data.theme_owner_window)) {
- Control::_propagate_theme_changed(this, parent_c->data.theme_owner, parent_c->data.theme_owner_window);
- } else {
- Window *parent_w = cast_to<Window>(get_parent());
- if (parent_w && (parent_w->theme_owner || parent_w->theme_owner_window)) {
- Control::_propagate_theme_changed(this, parent_w->theme_owner, parent_w->theme_owner_window);
- } else {
- Control::_propagate_theme_changed(this, nullptr, nullptr);
- }
- }
- }
-
- if (data.theme.is_valid()) {
- data.theme->connect("changed", callable_mp(this, &Control::_theme_changed), varray(), CONNECT_DEFERRED);
- }
-}
-
-Ref<Theme> Control::get_theme() const {
- return data.theme;
-}
-
-void Control::set_theme_type_variation(const StringName &p_theme_type) {
- data.theme_type_variation = p_theme_type;
- _propagate_theme_changed(this, data.theme_owner, data.theme_owner_window);
-}
-
-StringName Control::get_theme_type_variation() const {
- return data.theme_type_variation;
-}
-
-void Control::set_tooltip(const String &p_tooltip) {
- data.tooltip = p_tooltip;
- update_configuration_warnings();
-}
-
-String Control::get_tooltip(const Point2 &p_pos) const {
- return data.tooltip;
-}
-
-Control *Control::make_custom_tooltip(const String &p_text) const {
- Object *ret = nullptr;
- if (GDVIRTUAL_CALL(_make_custom_tooltip, p_text, ret)) {
- return Object::cast_to<Control>(ret);
- }
- return nullptr;
-}
-
-void Control::set_default_cursor_shape(CursorShape p_shape) {
- ERR_FAIL_INDEX(int(p_shape), CURSOR_MAX);
-
- data.default_cursor = p_shape;
-}
-
-Control::CursorShape Control::get_default_cursor_shape() const {
- return data.default_cursor;
-}
-
-Control::CursorShape Control::get_cursor_shape(const Point2 &p_pos) const {
- return data.default_cursor;
-}
-
-Transform2D Control::get_transform() const {
- Transform2D xform = _get_internal_transform();
- xform[2] += get_position();
- return xform;
-}
-
-String Control::_get_tooltip() const {
- return data.tooltip;
-}
-
void Control::set_focus_neighbor(Side p_side, const NodePath &p_neighbor) {
ERR_FAIL_INDEX((int)p_side, 4);
data.focus_neighbor[p_side] = p_neighbor;
@@ -2861,273 +2166,1011 @@ void Control::_window_find_focus_neighbor(const Vector2 &p_dir, Node *p_at, cons
}
}
-void Control::set_h_size_flags(int p_flags) {
- if (data.h_size_flags == p_flags) {
+// Rendering.
+
+void Control::set_default_cursor_shape(CursorShape p_shape) {
+ ERR_FAIL_INDEX(int(p_shape), CURSOR_MAX);
+
+ data.default_cursor = p_shape;
+}
+
+Control::CursorShape Control::get_default_cursor_shape() const {
+ return data.default_cursor;
+}
+
+Control::CursorShape Control::get_cursor_shape(const Point2 &p_pos) const {
+ return data.default_cursor;
+}
+
+void Control::set_disable_visibility_clip(bool p_ignore) {
+ data.disable_visibility_clip = p_ignore;
+ update();
+}
+
+bool Control::is_visibility_clip_disabled() const {
+ return data.disable_visibility_clip;
+}
+
+void Control::set_clip_contents(bool p_clip) {
+ data.clip_contents = p_clip;
+ update();
+}
+
+bool Control::is_clipping_contents() {
+ return data.clip_contents;
+}
+
+// Theming.
+
+void Control::_propagate_theme_changed(Node *p_at, Control *p_owner, Window *p_owner_window, bool p_assign) {
+ Control *c = Object::cast_to<Control>(p_at);
+
+ if (c && c != p_owner && c->data.theme.is_valid()) { // has a theme, this can't be propagated
return;
}
- data.h_size_flags = p_flags;
- emit_signal(SceneStringNames::get_singleton()->size_flags_changed);
+
+ Window *w = c == nullptr ? Object::cast_to<Window>(p_at) : nullptr;
+
+ if (w && w != p_owner_window && w->theme.is_valid()) { // has a theme, this can't be propagated
+ return;
+ }
+
+ for (int i = 0; i < p_at->get_child_count(); i++) {
+ CanvasItem *child = Object::cast_to<CanvasItem>(p_at->get_child(i));
+ if (child) {
+ _propagate_theme_changed(child, p_owner, p_owner_window, p_assign);
+ } else {
+ Window *window = Object::cast_to<Window>(p_at->get_child(i));
+ if (window) {
+ _propagate_theme_changed(window, p_owner, p_owner_window, p_assign);
+ }
+ }
+ }
+
+ if (c) {
+ if (p_assign) {
+ c->data.theme_owner = p_owner;
+ c->data.theme_owner_window = p_owner_window;
+ }
+ c->notification(Control::NOTIFICATION_THEME_CHANGED);
+ c->emit_signal(SceneStringNames::get_singleton()->theme_changed);
+ }
+
+ if (w) {
+ if (p_assign) {
+ w->theme_owner = p_owner;
+ w->theme_owner_window = p_owner_window;
+ }
+ w->notification(Window::NOTIFICATION_THEME_CHANGED);
+ w->emit_signal(SceneStringNames::get_singleton()->theme_changed);
+ }
}
-int Control::get_h_size_flags() const {
- return data.h_size_flags;
+void Control::_theme_changed() {
+ _propagate_theme_changed(this, this, nullptr, false);
}
-void Control::set_v_size_flags(int p_flags) {
- if (data.v_size_flags == p_flags) {
- return;
+void Control::_theme_property_override_changed() {
+ notification(NOTIFICATION_THEME_CHANGED);
+ emit_signal(SceneStringNames::get_singleton()->theme_changed);
+ update_minimum_size(); // Overrides are likely to affect minimum size.
+}
+
+void Control::_notify_theme_changed() {
+ if (!data.bulk_theme_override) {
+ notification(NOTIFICATION_THEME_CHANGED);
}
- data.v_size_flags = p_flags;
- emit_signal(SceneStringNames::get_singleton()->size_flags_changed);
}
-void Control::set_stretch_ratio(real_t p_ratio) {
- if (data.expand == p_ratio) {
+void Control::set_theme(const Ref<Theme> &p_theme) {
+ if (data.theme == p_theme) {
return;
}
- data.expand = p_ratio;
- emit_signal(SceneStringNames::get_singleton()->size_flags_changed);
+ if (data.theme.is_valid()) {
+ data.theme->disconnect("changed", callable_mp(this, &Control::_theme_changed));
+ }
+
+ data.theme = p_theme;
+ if (!p_theme.is_null()) {
+ data.theme_owner = this;
+ data.theme_owner_window = nullptr;
+ _propagate_theme_changed(this, this, nullptr);
+ } else {
+ Control *parent_c = Object::cast_to<Control>(get_parent());
+
+ if (parent_c && (parent_c->data.theme_owner || parent_c->data.theme_owner_window)) {
+ Control::_propagate_theme_changed(this, parent_c->data.theme_owner, parent_c->data.theme_owner_window);
+ } else {
+ Window *parent_w = cast_to<Window>(get_parent());
+ if (parent_w && (parent_w->theme_owner || parent_w->theme_owner_window)) {
+ Control::_propagate_theme_changed(this, parent_w->theme_owner, parent_w->theme_owner_window);
+ } else {
+ Control::_propagate_theme_changed(this, nullptr, nullptr);
+ }
+ }
+ }
+
+ if (data.theme.is_valid()) {
+ data.theme->connect("changed", callable_mp(this, &Control::_theme_changed), varray(), CONNECT_DEFERRED);
+ }
}
-real_t Control::get_stretch_ratio() const {
- return data.expand;
+Ref<Theme> Control::get_theme() const {
+ return data.theme;
}
-void Control::grab_click_focus() {
- ERR_FAIL_COND(!is_inside_tree());
+void Control::set_theme_type_variation(const StringName &p_theme_type) {
+ data.theme_type_variation = p_theme_type;
+ _propagate_theme_changed(this, data.theme_owner, data.theme_owner_window);
+}
- get_viewport()->_gui_grab_click_focus(this);
+StringName Control::get_theme_type_variation() const {
+ return data.theme_type_variation;
}
-void Control::update_minimum_size() {
- if (!is_inside_tree() || data.block_minimum_size_adjust) {
- return;
+/// Theme property lookup.
+
+template <class T>
+T Control::get_theme_item_in_types(Control *p_theme_owner, Window *p_theme_owner_window, Theme::DataType p_data_type, const StringName &p_name, List<StringName> p_theme_types) {
+ ERR_FAIL_COND_V_MSG(p_theme_types.size() == 0, T(), "At least one theme type must be specified.");
+
+ // First, look through each control or window node in the branch, until no valid parent can be found.
+ // Only nodes with a theme resource attached are considered.
+ Control *theme_owner = p_theme_owner;
+ Window *theme_owner_window = p_theme_owner_window;
+
+ while (theme_owner || theme_owner_window) {
+ // For each theme resource check the theme types provided and see if p_name exists with any of them.
+ for (const StringName &E : p_theme_types) {
+ if (theme_owner && theme_owner->data.theme->has_theme_item(p_data_type, p_name, E)) {
+ return theme_owner->data.theme->get_theme_item(p_data_type, p_name, E);
+ }
+
+ if (theme_owner_window && theme_owner_window->theme->has_theme_item(p_data_type, p_name, E)) {
+ return theme_owner_window->theme->get_theme_item(p_data_type, p_name, E);
+ }
+ }
+
+ Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
+ Control *parent_c = Object::cast_to<Control>(parent);
+ if (parent_c) {
+ theme_owner = parent_c->data.theme_owner;
+ theme_owner_window = parent_c->data.theme_owner_window;
+ } else {
+ Window *parent_w = Object::cast_to<Window>(parent);
+ if (parent_w) {
+ theme_owner = parent_w->theme_owner;
+ theme_owner_window = parent_w->theme_owner_window;
+ } else {
+ theme_owner = nullptr;
+ theme_owner_window = nullptr;
+ }
+ }
}
- Control *invalidate = this;
+ // Secondly, check the project-defined Theme resource.
+ if (Theme::get_project_default().is_valid()) {
+ for (const StringName &E : p_theme_types) {
+ if (Theme::get_project_default()->has_theme_item(p_data_type, p_name, E)) {
+ return Theme::get_project_default()->get_theme_item(p_data_type, p_name, E);
+ }
+ }
+ }
- //invalidate cache upwards
- while (invalidate && invalidate->data.minimum_size_valid) {
- invalidate->data.minimum_size_valid = false;
- if (invalidate->is_set_as_top_level()) {
- break; // do not go further up
+ // Lastly, fall back on the items defined in the default Theme, if they exist.
+ for (const StringName &E : p_theme_types) {
+ if (Theme::get_default()->has_theme_item(p_data_type, p_name, E)) {
+ return Theme::get_default()->get_theme_item(p_data_type, p_name, E);
}
- if (!invalidate->data.parent && get_parent()) {
- Window *parent_window = Object::cast_to<Window>(get_parent());
- if (parent_window && parent_window->is_wrapping_controls()) {
- parent_window->child_controls_changed();
+ }
+ // If they don't exist, use any type to return the default/empty value.
+ return Theme::get_default()->get_theme_item(p_data_type, p_name, p_theme_types[0]);
+}
+
+bool Control::has_theme_item_in_types(Control *p_theme_owner, Window *p_theme_owner_window, Theme::DataType p_data_type, const StringName &p_name, List<StringName> p_theme_types) {
+ ERR_FAIL_COND_V_MSG(p_theme_types.size() == 0, false, "At least one theme type must be specified.");
+
+ // First, look through each control or window node in the branch, until no valid parent can be found.
+ // Only nodes with a theme resource attached are considered.
+ Control *theme_owner = p_theme_owner;
+ Window *theme_owner_window = p_theme_owner_window;
+
+ while (theme_owner || theme_owner_window) {
+ // For each theme resource check the theme types provided and see if p_name exists with any of them.
+ for (const StringName &E : p_theme_types) {
+ if (theme_owner && theme_owner->data.theme->has_theme_item(p_data_type, p_name, E)) {
+ return true;
+ }
+
+ if (theme_owner_window && theme_owner_window->theme->has_theme_item(p_data_type, p_name, E)) {
+ return true;
+ }
+ }
+
+ Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
+ Control *parent_c = Object::cast_to<Control>(parent);
+ if (parent_c) {
+ theme_owner = parent_c->data.theme_owner;
+ theme_owner_window = parent_c->data.theme_owner_window;
+ } else {
+ Window *parent_w = Object::cast_to<Window>(parent);
+ if (parent_w) {
+ theme_owner = parent_w->theme_owner;
+ theme_owner_window = parent_w->theme_owner_window;
+ } else {
+ theme_owner = nullptr;
+ theme_owner_window = nullptr;
}
}
- invalidate = invalidate->data.parent;
}
- if (!is_visible_in_tree()) {
- return;
+ // Secondly, check the project-defined Theme resource.
+ if (Theme::get_project_default().is_valid()) {
+ for (const StringName &E : p_theme_types) {
+ if (Theme::get_project_default()->has_theme_item(p_data_type, p_name, E)) {
+ return true;
+ }
+ }
}
- if (data.updating_last_minimum_size) {
- return;
+ // Lastly, fall back on the items defined in the default Theme, if they exist.
+ for (const StringName &E : p_theme_types) {
+ if (Theme::get_default()->has_theme_item(p_data_type, p_name, E)) {
+ return true;
+ }
}
+ return false;
+}
- data.updating_last_minimum_size = true;
+void Control::_get_theme_type_dependencies(const StringName &p_theme_type, List<StringName> *p_list) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (Theme::get_project_default().is_valid() && Theme::get_project_default()->get_type_variation_base(data.theme_type_variation) != StringName()) {
+ Theme::get_project_default()->get_type_dependencies(get_class_name(), data.theme_type_variation, p_list);
+ } else {
+ Theme::get_default()->get_type_dependencies(get_class_name(), data.theme_type_variation, p_list);
+ }
+ } else {
+ Theme::get_default()->get_type_dependencies(p_theme_type, StringName(), p_list);
+ }
+}
- MessageQueue::get_singleton()->push_call(this, "_update_minimum_size");
+Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ const Ref<Texture2D> *tex = data.icon_override.getptr(p_name);
+ if (tex) {
+ return *tex;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return get_theme_item_in_types<Ref<Texture2D>>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_ICON, p_name, theme_types);
}
-int Control::get_v_size_flags() const {
- return data.v_size_flags;
+Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ const Ref<StyleBox> *style = data.style_override.getptr(p_name);
+ if (style) {
+ return *style;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return get_theme_item_in_types<Ref<StyleBox>>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_STYLEBOX, p_name, theme_types);
}
-void Control::set_mouse_filter(MouseFilter p_filter) {
- ERR_FAIL_INDEX(p_filter, 3);
- data.mouse_filter = p_filter;
- notify_property_list_changed();
- update_configuration_warnings();
+Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ const Ref<Font> *font = data.font_override.getptr(p_name);
+ if (font) {
+ return *font;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return get_theme_item_in_types<Ref<Font>>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT, p_name, theme_types);
}
-Control::MouseFilter Control::get_mouse_filter() const {
- return data.mouse_filter;
+int Control::get_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ const int *font_size = data.font_size_override.getptr(p_name);
+ if (font_size && (*font_size) > 0) {
+ return *font_size;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return get_theme_item_in_types<int>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT_SIZE, p_name, theme_types);
}
-void Control::set_force_pass_scroll_events(bool p_force_pass_scroll_events) {
- data.force_pass_scroll_events = p_force_pass_scroll_events;
+Color Control::get_theme_color(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ const Color *color = data.color_override.getptr(p_name);
+ if (color) {
+ return *color;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return get_theme_item_in_types<Color>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_COLOR, p_name, theme_types);
}
-bool Control::is_force_pass_scroll_events() const {
- return data.force_pass_scroll_events;
+int Control::get_theme_constant(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ const int *constant = data.constant_override.getptr(p_name);
+ if (constant) {
+ return *constant;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return get_theme_item_in_types<int>(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_CONSTANT, p_name, theme_types);
}
-void Control::warp_mouse(const Point2 &p_position) {
- ERR_FAIL_COND(!is_inside_tree());
- get_viewport()->warp_mouse(get_global_transform_with_canvas().xform(p_position));
+bool Control::has_theme_icon(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (has_theme_icon_override(p_name)) {
+ return true;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_ICON, p_name, theme_types);
}
-bool Control::is_text_field() const {
- return false;
+bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (has_theme_stylebox_override(p_name)) {
+ return true;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_STYLEBOX, p_name, theme_types);
}
-Array Control::structured_text_parser(TextServer::StructuredTextParser p_parser_type, const Array &p_args, const String &p_text) const {
- if (p_parser_type == TextServer::STRUCTURED_TEXT_CUSTOM) {
- Array ret;
- if (GDVIRTUAL_CALL(_structured_text_parser, p_args, p_text, ret)) {
- return ret;
- } else {
- return Array();
+bool Control::has_theme_font(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (has_theme_font_override(p_name)) {
+ return true;
}
- } else {
- return TS->parse_structured_text(p_parser_type, p_args, p_text);
}
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT, p_name, theme_types);
}
-void Control::set_rotation(real_t p_radians) {
- data.rotation = p_radians;
- update();
- _notify_transform();
+bool Control::has_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (has_theme_font_size_override(p_name)) {
+ return true;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_FONT_SIZE, p_name, theme_types);
}
-real_t Control::get_rotation() const {
- return data.rotation;
+bool Control::has_theme_color(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (has_theme_color_override(p_name)) {
+ return true;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_COLOR, p_name, theme_types);
}
-void Control::_override_changed() {
- notification(NOTIFICATION_THEME_CHANGED);
- emit_signal(SceneStringNames::get_singleton()->theme_changed);
- update_minimum_size(); // Overrides are likely to affect minimum size.
+bool Control::has_theme_constant(const StringName &p_name, const StringName &p_theme_type) const {
+ if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
+ if (has_theme_constant_override(p_name)) {
+ return true;
+ }
+ }
+
+ List<StringName> theme_types;
+ _get_theme_type_dependencies(p_theme_type, &theme_types);
+ return has_theme_item_in_types(data.theme_owner, data.theme_owner_window, Theme::DATA_TYPE_CONSTANT, p_name, theme_types);
}
-void Control::set_pivot_offset(const Vector2 &p_pivot) {
- data.pivot_offset = p_pivot;
- update();
- _notify_transform();
+/// Local property overrides.
+
+void Control::add_theme_icon_override(const StringName &p_name, const Ref<Texture2D> &p_icon) {
+ ERR_FAIL_COND(!p_icon.is_valid());
+
+ if (data.icon_override.has(p_name)) {
+ data.icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
+ }
+
+ data.icon_override[p_name] = p_icon;
+ data.icon_override[p_name]->connect("changed", callable_mp(this, &Control::_theme_property_override_changed), Vector<Variant>(), CONNECT_REFERENCE_COUNTED);
+ _notify_theme_changed();
}
-Vector2 Control::get_pivot_offset() const {
- return data.pivot_offset;
+void Control::add_theme_style_override(const StringName &p_name, const Ref<StyleBox> &p_style) {
+ ERR_FAIL_COND(!p_style.is_valid());
+
+ if (data.style_override.has(p_name)) {
+ data.style_override[p_name]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
+ }
+
+ data.style_override[p_name] = p_style;
+ data.style_override[p_name]->connect("changed", callable_mp(this, &Control::_theme_property_override_changed), Vector<Variant>(), CONNECT_REFERENCE_COUNTED);
+ _notify_theme_changed();
}
-void Control::set_scale(const Vector2 &p_scale) {
- data.scale = p_scale;
- // Avoid having 0 scale values, can lead to errors in physics and rendering.
- if (data.scale.x == 0) {
- data.scale.x = CMP_EPSILON;
+void Control::add_theme_font_override(const StringName &p_name, const Ref<Font> &p_font) {
+ ERR_FAIL_COND(!p_font.is_valid());
+
+ if (data.font_override.has(p_name)) {
+ data.font_override[p_name]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
}
- if (data.scale.y == 0) {
- data.scale.y = CMP_EPSILON;
+
+ data.font_override[p_name] = p_font;
+ data.font_override[p_name]->connect("changed", callable_mp(this, &Control::_theme_property_override_changed), Vector<Variant>(), CONNECT_REFERENCE_COUNTED);
+ _notify_theme_changed();
+}
+
+void Control::add_theme_font_size_override(const StringName &p_name, int p_font_size) {
+ data.font_size_override[p_name] = p_font_size;
+ _notify_theme_changed();
+}
+
+void Control::add_theme_color_override(const StringName &p_name, const Color &p_color) {
+ data.color_override[p_name] = p_color;
+ _notify_theme_changed();
+}
+
+void Control::add_theme_constant_override(const StringName &p_name, int p_constant) {
+ data.constant_override[p_name] = p_constant;
+ _notify_theme_changed();
+}
+
+void Control::remove_theme_icon_override(const StringName &p_name) {
+ if (data.icon_override.has(p_name)) {
+ data.icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
}
- update();
- _notify_transform();
+
+ data.icon_override.erase(p_name);
+ _notify_theme_changed();
}
-Vector2 Control::get_scale() const {
- return data.scale;
+void Control::remove_theme_style_override(const StringName &p_name) {
+ if (data.style_override.has(p_name)) {
+ data.style_override[p_name]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
+ }
+
+ data.style_override.erase(p_name);
+ _notify_theme_changed();
}
-Control *Control::get_root_parent_control() const {
- const CanvasItem *ci = this;
- const Control *root = this;
+void Control::remove_theme_font_override(const StringName &p_name) {
+ if (data.font_override.has(p_name)) {
+ data.font_override[p_name]->disconnect("changed", callable_mp(this, &Control::_theme_property_override_changed));
+ }
- while (ci) {
- const Control *c = Object::cast_to<Control>(ci);
- if (c) {
- root = c;
+ data.font_override.erase(p_name);
+ _notify_theme_changed();
+}
- if (c->data.RI || c->is_top_level_control()) {
- break;
+void Control::remove_theme_font_size_override(const StringName &p_name) {
+ data.font_size_override.erase(p_name);
+ _notify_theme_changed();
+}
+
+void Control::remove_theme_color_override(const StringName &p_name) {
+ data.color_override.erase(p_name);
+ _notify_theme_changed();
+}
+
+void Control::remove_theme_constant_override(const StringName &p_name) {
+ data.constant_override.erase(p_name);
+ _notify_theme_changed();
+}
+
+bool Control::has_theme_icon_override(const StringName &p_name) const {
+ const Ref<Texture2D> *tex = data.icon_override.getptr(p_name);
+ return tex != nullptr;
+}
+
+bool Control::has_theme_stylebox_override(const StringName &p_name) const {
+ const Ref<StyleBox> *style = data.style_override.getptr(p_name);
+ return style != nullptr;
+}
+
+bool Control::has_theme_font_override(const StringName &p_name) const {
+ const Ref<Font> *font = data.font_override.getptr(p_name);
+ return font != nullptr;
+}
+
+bool Control::has_theme_font_size_override(const StringName &p_name) const {
+ const int *font_size = data.font_size_override.getptr(p_name);
+ return font_size != nullptr;
+}
+
+bool Control::has_theme_color_override(const StringName &p_name) const {
+ const Color *color = data.color_override.getptr(p_name);
+ return color != nullptr;
+}
+
+bool Control::has_theme_constant_override(const StringName &p_name) const {
+ const int *constant = data.constant_override.getptr(p_name);
+ return constant != nullptr;
+}
+
+/// Default theme properties.
+
+float Control::fetch_theme_default_base_scale(Control *p_theme_owner, Window *p_theme_owner_window) {
+ // First, look through each control or window node in the branch, until no valid parent can be found.
+ // Only nodes with a theme resource attached are considered.
+ // For each theme resource see if their assigned theme has the default value defined and valid.
+ Control *theme_owner = p_theme_owner;
+ Window *theme_owner_window = p_theme_owner_window;
+
+ while (theme_owner || theme_owner_window) {
+ if (theme_owner && theme_owner->data.theme->has_default_base_scale()) {
+ return theme_owner->data.theme->get_default_base_scale();
+ }
+
+ if (theme_owner_window && theme_owner_window->theme->has_default_base_scale()) {
+ return theme_owner_window->theme->get_default_base_scale();
+ }
+
+ Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
+ Control *parent_c = Object::cast_to<Control>(parent);
+ if (parent_c) {
+ theme_owner = parent_c->data.theme_owner;
+ theme_owner_window = parent_c->data.theme_owner_window;
+ } else {
+ Window *parent_w = Object::cast_to<Window>(parent);
+ if (parent_w) {
+ theme_owner = parent_w->theme_owner;
+ theme_owner_window = parent_w->theme_owner_window;
+ } else {
+ theme_owner = nullptr;
+ theme_owner_window = nullptr;
}
}
+ }
- ci = ci->get_parent_item();
+ // Secondly, check the project-defined Theme resource.
+ if (Theme::get_project_default().is_valid()) {
+ if (Theme::get_project_default()->has_default_base_scale()) {
+ return Theme::get_project_default()->get_default_base_scale();
+ }
}
- return const_cast<Control *>(root);
+ // Lastly, fall back on the default Theme.
+ if (Theme::get_default()->has_default_base_scale()) {
+ return Theme::get_default()->get_default_base_scale();
+ }
+ return Theme::get_fallback_base_scale();
}
-void Control::set_block_minimum_size_adjust(bool p_block) {
- data.block_minimum_size_adjust = p_block;
+float Control::get_theme_default_base_scale() const {
+ return fetch_theme_default_base_scale(data.theme_owner, data.theme_owner_window);
}
-bool Control::is_minimum_size_adjust_blocked() const {
- return data.block_minimum_size_adjust;
-}
+Ref<Font> Control::fetch_theme_default_font(Control *p_theme_owner, Window *p_theme_owner_window) {
+ // First, look through each control or window node in the branch, until no valid parent can be found.
+ // Only nodes with a theme resource attached are considered.
+ // For each theme resource see if their assigned theme has the default value defined and valid.
+ Control *theme_owner = p_theme_owner;
+ Window *theme_owner_window = p_theme_owner_window;
-void Control::set_disable_visibility_clip(bool p_ignore) {
- data.disable_visibility_clip = p_ignore;
- update();
+ while (theme_owner || theme_owner_window) {
+ if (theme_owner && theme_owner->data.theme->has_default_font()) {
+ return theme_owner->data.theme->get_default_font();
+ }
+
+ if (theme_owner_window && theme_owner_window->theme->has_default_font()) {
+ return theme_owner_window->theme->get_default_font();
+ }
+
+ Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
+ Control *parent_c = Object::cast_to<Control>(parent);
+ if (parent_c) {
+ theme_owner = parent_c->data.theme_owner;
+ theme_owner_window = parent_c->data.theme_owner_window;
+ } else {
+ Window *parent_w = Object::cast_to<Window>(parent);
+ if (parent_w) {
+ theme_owner = parent_w->theme_owner;
+ theme_owner_window = parent_w->theme_owner_window;
+ } else {
+ theme_owner = nullptr;
+ theme_owner_window = nullptr;
+ }
+ }
+ }
+
+ // Secondly, check the project-defined Theme resource.
+ if (Theme::get_project_default().is_valid()) {
+ if (Theme::get_project_default()->has_default_font()) {
+ return Theme::get_project_default()->get_default_font();
+ }
+ }
+
+ // Lastly, fall back on the default Theme.
+ if (Theme::get_default()->has_default_font()) {
+ return Theme::get_default()->get_default_font();
+ }
+ return Theme::get_fallback_font();
}
-bool Control::is_visibility_clip_disabled() const {
- return data.disable_visibility_clip;
+Ref<Font> Control::get_theme_default_font() const {
+ return fetch_theme_default_font(data.theme_owner, data.theme_owner_window);
}
-void Control::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const {
- Node::get_argument_options(p_function, p_idx, r_options);
+int Control::fetch_theme_default_font_size(Control *p_theme_owner, Window *p_theme_owner_window) {
+ // First, look through each control or window node in the branch, until no valid parent can be found.
+ // Only nodes with a theme resource attached are considered.
+ // For each theme resource see if their assigned theme has the default value defined and valid.
+ Control *theme_owner = p_theme_owner;
+ Window *theme_owner_window = p_theme_owner_window;
- if (p_idx == 0) {
- List<StringName> sn;
- String pf = p_function;
- if (pf == "add_theme_color_override" || pf == "has_theme_color" || pf == "has_theme_color_override" || pf == "get_theme_color") {
- Theme::get_default()->get_color_list(get_class(), &sn);
- } else if (pf == "add_theme_style_override" || pf == "has_theme_style" || pf == "has_theme_style_override" || pf == "get_theme_style") {
- Theme::get_default()->get_stylebox_list(get_class(), &sn);
- } else if (pf == "add_theme_font_override" || pf == "has_theme_font" || pf == "has_theme_font_override" || pf == "get_theme_font") {
- Theme::get_default()->get_font_list(get_class(), &sn);
- } else if (pf == "add_theme_font_size_override" || pf == "has_theme_font_size" || pf == "has_theme_font_size_override" || pf == "get_theme_font_size") {
- Theme::get_default()->get_font_size_list(get_class(), &sn);
- } else if (pf == "add_theme_constant_override" || pf == "has_theme_constant" || pf == "has_theme_constant_override" || pf == "get_theme_constant") {
- Theme::get_default()->get_constant_list(get_class(), &sn);
+ while (theme_owner || theme_owner_window) {
+ if (theme_owner && theme_owner->data.theme->has_default_font_size()) {
+ return theme_owner->data.theme->get_default_font_size();
}
- sn.sort_custom<StringName::AlphCompare>();
- for (const StringName &name : sn) {
- r_options->push_back(String(name).quote());
+ if (theme_owner_window && theme_owner_window->theme->has_default_font_size()) {
+ return theme_owner_window->theme->get_default_font_size();
+ }
+
+ Node *parent = theme_owner ? theme_owner->get_parent() : theme_owner_window->get_parent();
+ Control *parent_c = Object::cast_to<Control>(parent);
+ if (parent_c) {
+ theme_owner = parent_c->data.theme_owner;
+ theme_owner_window = parent_c->data.theme_owner_window;
+ } else {
+ Window *parent_w = Object::cast_to<Window>(parent);
+ if (parent_w) {
+ theme_owner = parent_w->theme_owner;
+ theme_owner_window = parent_w->theme_owner_window;
+ } else {
+ theme_owner = nullptr;
+ theme_owner_window = nullptr;
+ }
}
}
+
+ // Secondly, check the project-defined Theme resource.
+ if (Theme::get_project_default().is_valid()) {
+ if (Theme::get_project_default()->has_default_font_size()) {
+ return Theme::get_project_default()->get_default_font_size();
+ }
+ }
+
+ // Lastly, fall back on the default Theme.
+ if (Theme::get_default()->has_default_font_size()) {
+ return Theme::get_default()->get_default_font_size();
+ }
+ return Theme::get_fallback_font_size();
}
-TypedArray<String> Control::get_configuration_warnings() const {
- TypedArray<String> warnings = Node::get_configuration_warnings();
+int Control::get_theme_default_font_size() const {
+ return fetch_theme_default_font_size(data.theme_owner, data.theme_owner_window);
+}
- if (data.mouse_filter == MOUSE_FILTER_IGNORE && !data.tooltip.is_empty()) {
- warnings.push_back(RTR("The Hint Tooltip won't be displayed as the control's Mouse Filter is set to \"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."));
+/// Bulk actions.
+
+void Control::begin_bulk_theme_override() {
+ data.bulk_theme_override = true;
+}
+
+void Control::end_bulk_theme_override() {
+ ERR_FAIL_COND(!data.bulk_theme_override);
+
+ data.bulk_theme_override = false;
+ _notify_theme_changed();
+}
+
+// Internationalization.
+
+Array Control::structured_text_parser(TextServer::StructuredTextParser p_parser_type, const Array &p_args, const String &p_text) const {
+ if (p_parser_type == TextServer::STRUCTURED_TEXT_CUSTOM) {
+ Array ret;
+ if (GDVIRTUAL_CALL(_structured_text_parser, p_args, p_text, ret)) {
+ return ret;
+ } else {
+ return Array();
+ }
+ } else {
+ return TS->parse_structured_text(p_parser_type, p_args, p_text);
}
+}
- return warnings;
+void Control::set_layout_direction(Control::LayoutDirection p_direction) {
+ ERR_FAIL_INDEX((int)p_direction, 4);
+
+ data.layout_dir = p_direction;
+ data.is_rtl_dirty = true;
+
+ propagate_notification(NOTIFICATION_LAYOUT_DIRECTION_CHANGED);
}
-void Control::set_clip_contents(bool p_clip) {
- data.clip_contents = p_clip;
- update();
+Control::LayoutDirection Control::get_layout_direction() const {
+ return data.layout_dir;
}
-bool Control::is_clipping_contents() {
- return data.clip_contents;
+bool Control::is_layout_rtl() const {
+ if (data.is_rtl_dirty) {
+ const_cast<Control *>(this)->data.is_rtl_dirty = false;
+ if (data.layout_dir == LAYOUT_DIRECTION_INHERITED) {
+ Window *parent_window = get_parent_window();
+ Control *parent_control = get_parent_control();
+ if (parent_control) {
+ const_cast<Control *>(this)->data.is_rtl = parent_control->is_layout_rtl();
+ } else if (parent_window) {
+ const_cast<Control *>(this)->data.is_rtl = parent_window->is_layout_rtl();
+ } else {
+ if (GLOBAL_GET(SNAME("internationalization/rendering/force_right_to_left_layout_direction"))) {
+ const_cast<Control *>(this)->data.is_rtl = true;
+ } else {
+ String locale = TranslationServer::get_singleton()->get_tool_locale();
+ const_cast<Control *>(this)->data.is_rtl = TS->is_locale_right_to_left(locale);
+ }
+ }
+ } else if (data.layout_dir == LAYOUT_DIRECTION_LOCALE) {
+ if (GLOBAL_GET(SNAME("internationalization/rendering/force_right_to_left_layout_direction"))) {
+ const_cast<Control *>(this)->data.is_rtl = true;
+ } else {
+ String locale = TranslationServer::get_singleton()->get_tool_locale();
+ const_cast<Control *>(this)->data.is_rtl = TS->is_locale_right_to_left(locale);
+ }
+ } else {
+ const_cast<Control *>(this)->data.is_rtl = (data.layout_dir == LAYOUT_DIRECTION_RTL);
+ }
+ }
+ return data.is_rtl;
}
-void Control::set_h_grow_direction(GrowDirection p_direction) {
- ERR_FAIL_INDEX((int)p_direction, 3);
+void Control::set_auto_translate(bool p_enable) {
+ if (p_enable == data.auto_translate) {
+ return;
+ }
- data.h_grow = p_direction;
- _size_changed();
+ data.auto_translate = p_enable;
+
+ notification(MainLoop::NOTIFICATION_TRANSLATION_CHANGED);
}
-Control::GrowDirection Control::get_h_grow_direction() const {
- return data.h_grow;
+bool Control::is_auto_translating() const {
+ return data.auto_translate;
}
-void Control::set_v_grow_direction(GrowDirection p_direction) {
- ERR_FAIL_INDEX((int)p_direction, 3);
+// Extra properties.
- data.v_grow = p_direction;
- _size_changed();
+void Control::set_tooltip(const String &p_tooltip) {
+ data.tooltip = p_tooltip;
+ update_configuration_warnings();
}
-Control::GrowDirection Control::get_v_grow_direction() const {
- return data.v_grow;
+String Control::_get_tooltip() const {
+ return data.tooltip;
+}
+
+String Control::get_tooltip(const Point2 &p_pos) const {
+ return data.tooltip;
+}
+
+Control *Control::make_custom_tooltip(const String &p_text) const {
+ Object *ret = nullptr;
+ if (GDVIRTUAL_CALL(_make_custom_tooltip, p_text, ret)) {
+ return Object::cast_to<Control>(ret);
+ }
+ return nullptr;
+}
+
+// Base object overrides.
+
+void Control::add_child_notify(Node *p_child) {
+ Control *child_c = Object::cast_to<Control>(p_child);
+
+ if (child_c && child_c->data.theme.is_null() && (data.theme_owner || data.theme_owner_window)) {
+ _propagate_theme_changed(child_c, data.theme_owner, data.theme_owner_window); //need to propagate here, since many controls may require setting up stuff
+ }
+
+ Window *child_w = Object::cast_to<Window>(p_child);
+
+ if (child_w && child_w->theme.is_null() && (data.theme_owner || data.theme_owner_window)) {
+ _propagate_theme_changed(child_w, data.theme_owner, data.theme_owner_window); //need to propagate here, since many controls may require setting up stuff
+ }
+}
+
+void Control::remove_child_notify(Node *p_child) {
+ Control *child_c = Object::cast_to<Control>(p_child);
+
+ if (child_c && (child_c->data.theme_owner || child_c->data.theme_owner_window) && child_c->data.theme.is_null()) {
+ _propagate_theme_changed(child_c, nullptr, nullptr);
+ }
+
+ Window *child_w = Object::cast_to<Window>(p_child);
+
+ if (child_w && (child_w->theme_owner || child_w->theme_owner_window) && child_w->theme.is_null()) {
+ _propagate_theme_changed(child_w, nullptr, nullptr);
+ }
+}
+
+void Control::_notification(int p_notification) {
+ switch (p_notification) {
+ case NOTIFICATION_POST_ENTER_TREE: {
+ data.minimum_size_valid = false;
+ data.is_rtl_dirty = true;
+ _size_changed();
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
+ release_focus();
+ get_viewport()->_gui_remove_control(this);
+ } break;
+
+ case NOTIFICATION_READY: {
+#ifdef DEBUG_ENABLED
+ connect("ready", callable_mp(this, &Control::_clear_size_warning), varray(), CONNECT_DEFERRED | CONNECT_ONESHOT);
+#endif
+ } break;
+
+ case NOTIFICATION_ENTER_CANVAS: {
+ data.parent = Object::cast_to<Control>(get_parent());
+ data.parent_window = Object::cast_to<Window>(get_parent());
+ data.is_rtl_dirty = true;
+
+ if (data.theme.is_null()) {
+ if (data.parent && (data.parent->data.theme_owner || data.parent->data.theme_owner_window)) {
+ data.theme_owner = data.parent->data.theme_owner;
+ data.theme_owner_window = data.parent->data.theme_owner_window;
+ notification(NOTIFICATION_THEME_CHANGED);
+ } else if (data.parent_window && (data.parent_window->theme_owner || data.parent_window->theme_owner_window)) {
+ data.theme_owner = data.parent_window->theme_owner;
+ data.theme_owner_window = data.parent_window->theme_owner_window;
+ notification(NOTIFICATION_THEME_CHANGED);
+ }
+ }
+
+ CanvasItem *node = this;
+ bool has_parent_control = false;
+
+ while (!node->is_set_as_top_level()) {
+ CanvasItem *parent = Object::cast_to<CanvasItem>(node->get_parent());
+ if (!parent) {
+ break;
+ }
+
+ Control *parent_control = Object::cast_to<Control>(parent);
+ if (parent_control) {
+ has_parent_control = true;
+ break;
+ }
+
+ node = parent;
+ }
+
+ if (has_parent_control) {
+ // Do nothing, has a parent control.
+ } else {
+ // Is a regular root control or top_level.
+ Viewport *viewport = get_viewport();
+ ERR_FAIL_COND(!viewport);
+ data.RI = viewport->_gui_add_root_control(this);
+ }
+
+ data.parent_canvas_item = get_parent_item();
+
+ if (data.parent_canvas_item) {
+ data.parent_canvas_item->connect("item_rect_changed", callable_mp(this, &Control::_size_changed));
+ } else {
+ // Connect viewport.
+ Viewport *viewport = get_viewport();
+ ERR_FAIL_COND(!viewport);
+ viewport->connect("size_changed", callable_mp(this, &Control::_size_changed));
+ }
+ } break;
+
+ case NOTIFICATION_EXIT_CANVAS: {
+ if (data.parent_canvas_item) {
+ data.parent_canvas_item->disconnect("item_rect_changed", callable_mp(this, &Control::_size_changed));
+ data.parent_canvas_item = nullptr;
+ } else if (!is_set_as_top_level()) {
+ //disconnect viewport
+ Viewport *viewport = get_viewport();
+ ERR_FAIL_COND(!viewport);
+ viewport->disconnect("size_changed", callable_mp(this, &Control::_size_changed));
+ }
+
+ if (data.RI) {
+ get_viewport()->_gui_remove_root_control(data.RI);
+ data.RI = nullptr;
+ }
+
+ data.parent = nullptr;
+ data.parent_canvas_item = nullptr;
+ data.parent_window = nullptr;
+ data.is_rtl_dirty = true;
+ } break;
+
+ case NOTIFICATION_MOVED_IN_PARENT: {
+ // some parents need to know the order of the children to draw (like TabContainer)
+ // update if necessary
+ if (data.parent) {
+ data.parent->update();
+ }
+ update();
+
+ if (data.RI) {
+ get_viewport()->_gui_set_root_order_dirty();
+ }
+ } break;
+
+ case NOTIFICATION_RESIZED: {
+ emit_signal(SceneStringNames::get_singleton()->resized);
+ } break;
+
+ case NOTIFICATION_DRAW: {
+ _update_canvas_item_transform();
+ RenderingServer::get_singleton()->canvas_item_set_custom_rect(get_canvas_item(), !data.disable_visibility_clip, Rect2(Point2(), get_size()));
+ RenderingServer::get_singleton()->canvas_item_set_clip(get_canvas_item(), data.clip_contents);
+ } break;
+
+ case NOTIFICATION_MOUSE_ENTER: {
+ emit_signal(SceneStringNames::get_singleton()->mouse_entered);
+ } break;
+
+ case NOTIFICATION_MOUSE_EXIT: {
+ emit_signal(SceneStringNames::get_singleton()->mouse_exited);
+ } break;
+
+ case NOTIFICATION_FOCUS_ENTER: {
+ emit_signal(SceneStringNames::get_singleton()->focus_entered);
+ update();
+ } break;
+
+ case NOTIFICATION_FOCUS_EXIT: {
+ emit_signal(SceneStringNames::get_singleton()->focus_exited);
+ update();
+ } break;
+
+ case NOTIFICATION_THEME_CHANGED: {
+ update_minimum_size();
+ update();
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (!is_visible_in_tree()) {
+ if (get_viewport() != nullptr) {
+ get_viewport()->_gui_hide_control(this);
+ }
+ } else {
+ data.minimum_size_valid = false;
+ _update_minimum_size();
+ _size_changed();
+ }
+ } break;
+
+ case NOTIFICATION_TRANSLATION_CHANGED:
+ case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: {
+ if (is_inside_tree()) {
+ data.is_rtl_dirty = true;
+ _size_changed();
+ }
+ } break;
+ }
}
void Control::_bind_methods() {
- //ClassDB::bind_method(D_METHOD("_window_resize_event"),&Control::_window_resize_event);
ClassDB::bind_method(D_METHOD("_update_minimum_size"), &Control::_update_minimum_size);
ClassDB::bind_method(D_METHOD("accept_event"), &Control::accept_event);
diff --git a/scene/gui/control.h b/scene/gui/control.h
index d9c29a9c87..9f17eccc3b 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -159,13 +159,16 @@ private:
};
struct Data {
- Point2 pos_cache;
- Size2 size_cache;
- Size2 minimum_size_cache;
- bool minimum_size_valid = false;
+ // Global relations.
- Size2 last_minimum_size;
- bool updating_last_minimum_size = false;
+ List<Control *>::Element *RI = nullptr;
+
+ Control *parent = nullptr;
+ Window *parent_window = nullptr;
+ CanvasItem *parent_canvas_item = nullptr;
+ ObjectID drag_owner;
+
+ // Positioning and sizing.
real_t offset[4] = { 0.0, 0.0, 0.0, 0.0 };
real_t anchor[4] = { ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_BEGIN };
@@ -173,49 +176,51 @@ private:
GrowDirection h_grow = GROW_DIRECTION_END;
GrowDirection v_grow = GROW_DIRECTION_END;
- LayoutDirection layout_dir = LAYOUT_DIRECTION_INHERITED;
- bool is_rtl_dirty = true;
- bool is_rtl = false;
-
- bool auto_translate = true;
-
real_t rotation = 0.0;
Vector2 scale = Vector2(1, 1);
Vector2 pivot_offset;
+
+ Point2 pos_cache;
+ Size2 size_cache;
+ Size2 minimum_size_cache;
+ bool minimum_size_valid = false;
+
+ Size2 last_minimum_size;
+ bool updating_last_minimum_size = false;
+ bool block_minimum_size_adjust = false;
+
bool size_warning = true;
+ // Container sizing.
+
int h_size_flags = SIZE_FILL;
int v_size_flags = SIZE_FILL;
real_t expand = 1.0;
Point2 custom_minimum_size;
+ // Input events and rendering.
+
MouseFilter mouse_filter = MOUSE_FILTER_STOP;
bool force_pass_scroll_events = true;
bool clip_contents = false;
-
- bool block_minimum_size_adjust = false;
bool disable_visibility_clip = false;
- Control *parent = nullptr;
- ObjectID drag_owner;
- Ref<Theme> theme;
- Control *theme_owner = nullptr;
- Window *theme_owner_window = nullptr;
- Window *parent_window = nullptr;
- StringName theme_type_variation;
-
- String tooltip;
CursorShape default_cursor = CURSOR_ARROW;
- List<Control *>::Element *RI = nullptr;
-
- CanvasItem *parent_canvas_item = nullptr;
+ // Focus.
NodePath focus_neighbor[4];
NodePath focus_next;
NodePath focus_prev;
+ // Theming.
+
+ Ref<Theme> theme;
+ Control *theme_owner = nullptr;
+ Window *theme_owner_window = nullptr;
+ StringName theme_type_variation;
+
bool bulk_theme_override = false;
Theme::ThemeIconMap icon_override;
Theme::ThemeStyleMap style_override;
@@ -224,50 +229,69 @@ private:
Theme::ThemeColorMap color_override;
Theme::ThemeConstantMap constant_override;
+ // Internationalization.
+
+ LayoutDirection layout_dir = LAYOUT_DIRECTION_INHERITED;
+ bool is_rtl_dirty = true;
+ bool is_rtl = false;
+
+ bool auto_translate = true;
+
+ // Extra properties.
+
+ String tooltip;
+
} data;
+ // Dynamic properties.
+
static constexpr unsigned properties_managed_by_container_count = 12;
static String properties_managed_by_container[properties_managed_by_container_count];
- void _window_find_focus_neighbor(const Vector2 &p_dir, Node *p_at, const Point2 *p_points, real_t p_min, real_t &r_closest_dist, Control **r_closest);
- Control *_get_focus_neighbor(Side p_side, int p_count = 0);
+ // Global relations.
+
+ friend class Viewport;
+ friend class Window;
+
+ // Positioning and sizing.
+
+ void _update_canvas_item_transform();
+ Transform2D _get_internal_transform() const;
void _set_anchor(Side p_side, real_t p_anchor);
void _set_position(const Point2 &p_point);
void _set_global_position(const Point2 &p_point);
void _set_size(const Size2 &p_size);
+ void _compute_offsets(Rect2 p_rect, const real_t p_anchors[4], real_t (&r_offsets)[4]);
+ void _compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]);
+
void _set_layout_mode(LayoutMode p_mode);
LayoutMode _get_layout_mode() const;
-
void _set_anchors_layout_preset(int p_preset);
int _get_anchors_layout_preset() const;
- void _theme_changed();
- void _notify_theme_changed();
-
+ void _update_minimum_size_cache();
void _update_minimum_size();
+ void _size_changed();
void _clear_size_warning();
- void _compute_offsets(Rect2 p_rect, const real_t p_anchors[4], real_t (&r_offsets)[4]);
- void _compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]);
-
- void _size_changed();
- String _get_tooltip() const;
+ // Input events.
- void _override_changed();
+ void _call_gui_input(const Ref<InputEvent> &p_event);
- void _update_canvas_item_transform();
+ // Focus.
- Transform2D _get_internal_transform() const;
+ void _window_find_focus_neighbor(const Vector2 &p_dir, Node *p_at, const Point2 *p_points, real_t p_min, real_t &r_closest_dist, Control **r_closest);
+ Control *_get_focus_neighbor(Side p_side, int p_count = 0);
- friend class Viewport;
+ // Theming.
- void _call_gui_input(const Ref<InputEvent> &p_event);
+ void _theme_changed();
+ void _theme_property_override_changed();
+ void _notify_theme_changed();
- void _update_minimum_size_cache();
- friend class Window;
static void _propagate_theme_changed(Node *p_at, Control *p_owner, Window *p_owner_window, bool p_assign = true);
template <class T>
@@ -275,24 +299,31 @@ private:
static bool has_theme_item_in_types(Control *p_theme_owner, Window *p_theme_owner_window, Theme::DataType p_data_type, const StringName &p_name, List<StringName> p_theme_types);
_FORCE_INLINE_ void _get_theme_type_dependencies(const StringName &p_theme_type, List<StringName> *p_list) const;
-protected:
- virtual void add_child_notify(Node *p_child) override;
- virtual void remove_child_notify(Node *p_child) override;
+ // Extra properties.
- //virtual void _window_gui_input(InputEvent p_event);
+ String _get_tooltip() const;
- virtual Array structured_text_parser(TextServer::StructuredTextParser p_parser_type, const Array &p_args, const String &p_text) const;
+protected:
+ // Dynamic properties.
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
-
virtual void _validate_property(PropertyInfo &property) const override;
+ // Internationalization.
+
+ virtual Array structured_text_parser(TextServer::StructuredTextParser p_parser_type, const Array &p_args, const String &p_text) const;
+
+ // Base object overrides.
+
+ virtual void add_child_notify(Node *p_child) override;
+ virtual void remove_child_notify(Node *p_child) override;
+
void _notification(int p_notification);
static void _bind_methods();
- //bind helpers
+ // Exposed virtual methods.
GDVIRTUAL1RC(bool, _has_point, Vector2)
GDVIRTUAL2RC(Array, _structured_text_parser, Array, String)
@@ -307,8 +338,6 @@ protected:
public:
enum {
- /* NOTIFICATION_DRAW=30,
- NOTIFICATION_VISIBILITY_CHANGED=38*/
NOTIFICATION_RESIZED = 40,
NOTIFICATION_MOUSE_ENTER = 41,
NOTIFICATION_MOUSE_EXIT = 42,
@@ -318,10 +347,11 @@ public:
NOTIFICATION_SCROLL_BEGIN = 47,
NOTIFICATION_SCROLL_END = 48,
NOTIFICATION_LAYOUT_DIRECTION_CHANGED = 49,
-
};
- /* EDITOR */
+ // Editor plugin interoperability.
+
+ // TODO: Decouple controls from their editor plugin and get rid of this.
#ifdef TOOLS_ENABLED
virtual Dictionary _edit_get_state() const override;
virtual void _edit_set_state(const Dictionary &p_state) override;
@@ -347,56 +377,50 @@ public:
virtual Size2 _edit_get_minimum_size() const override;
#endif
- virtual void gui_input(const Ref<InputEvent> &p_event);
+ // Editor integration.
- void accept_event();
+ virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override;
+ TypedArray<String> get_configuration_warnings() const override;
- virtual Size2 get_minimum_size() const;
- virtual Size2 get_combined_minimum_size() const;
- virtual bool has_point(const Point2 &p_point) const;
- virtual void set_drag_forwarding(Object *p_target);
- virtual Variant get_drag_data(const Point2 &p_point);
- virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const;
- virtual void drop_data(const Point2 &p_point, const Variant &p_data);
- void set_drag_preview(Control *p_control);
- void force_drag(const Variant &p_data, Control *p_control);
- bool is_drag_successful() const;
+ virtual bool is_text_field() const;
- void set_custom_minimum_size(const Size2 &p_custom);
- Size2 get_custom_minimum_size() const;
+ // Global relations.
+
+ bool is_top_level_control() const;
Control *get_parent_control() const;
Window *get_parent_window() const;
+ Control *get_root_parent_control() const;
- void set_layout_direction(LayoutDirection p_direction);
- LayoutDirection get_layout_direction() const;
- virtual bool is_layout_rtl() const;
-
- void set_auto_translate(bool p_enable);
- bool is_auto_translating() const;
- _FORCE_INLINE_ String atr(const String p_string) const { return is_auto_translating() ? tr(p_string) : p_string; };
+ Size2 get_parent_area_size() const;
+ Rect2 get_parent_anchorable_rect() const;
- /* POSITIONING */
+ // Positioning and sizing.
- void set_anchors_preset(LayoutPreset p_preset, bool p_keep_offsets = true);
- void set_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0);
- void set_anchors_and_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0);
- void set_grow_direction_preset(LayoutPreset p_preset);
+ virtual Transform2D get_transform() const override;
void set_anchor(Side p_side, real_t p_anchor, bool p_keep_offset = true, bool p_push_opposite_anchor = true);
real_t get_anchor(Side p_side) const;
-
void set_offset(Side p_side, real_t p_value);
real_t get_offset(Side p_side) const;
-
void set_anchor_and_offset(Side p_side, real_t p_anchor, real_t p_pos, bool p_push_opposite_anchor = true);
- void set_begin(const Point2 &p_point); // helper
- void set_end(const Point2 &p_point); // helper
-
+ // TODO: Rename to set_begin/end_offsets ?
+ void set_begin(const Point2 &p_point);
Point2 get_begin() const;
+ void set_end(const Point2 &p_point);
Point2 get_end() const;
+ void set_h_grow_direction(GrowDirection p_direction);
+ GrowDirection get_h_grow_direction() const;
+ void set_v_grow_direction(GrowDirection p_direction);
+ GrowDirection get_v_grow_direction() const;
+
+ void set_anchors_preset(LayoutPreset p_preset, bool p_keep_offsets = true);
+ void set_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0);
+ void set_anchors_and_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0);
+ void set_grow_direction_preset(LayoutPreset p_preset);
+
void set_position(const Point2 &p_point, bool p_keep_offsets = false);
void set_global_position(const Point2 &p_point, bool p_keep_offsets = false);
Point2 get_position() const;
@@ -407,52 +431,72 @@ public:
Size2 get_size() const;
void reset_size();
+ void set_rect(const Rect2 &p_rect); // Reset anchors to begin and set rect, for faster container children sorting.
Rect2 get_rect() const;
Rect2 get_global_rect() const;
Rect2 get_screen_rect() const;
Rect2 get_window_rect() const; ///< use with care, as it blocks waiting for the rendering server
Rect2 get_anchorable_rect() const override;
- void set_rect(const Rect2 &p_rect); // Reset anchors to begin and set rect, for faster container children sorting.
-
+ void set_scale(const Vector2 &p_scale);
+ Vector2 get_scale() const;
void set_rotation(real_t p_radians);
real_t get_rotation() const;
-
- void set_h_grow_direction(GrowDirection p_direction);
- GrowDirection get_h_grow_direction() const;
-
- void set_v_grow_direction(GrowDirection p_direction);
- GrowDirection get_v_grow_direction() const;
-
void set_pivot_offset(const Vector2 &p_pivot);
Vector2 get_pivot_offset() const;
- void set_scale(const Vector2 &p_scale);
- Vector2 get_scale() const;
+ void update_minimum_size();
- void set_theme(const Ref<Theme> &p_theme);
- Ref<Theme> get_theme() const;
+ void set_block_minimum_size_adjust(bool p_block);
+ bool is_minimum_size_adjust_blocked() const;
- void set_theme_type_variation(const StringName &p_theme_type);
- StringName get_theme_type_variation() const;
+ virtual Size2 get_minimum_size() const;
+ virtual Size2 get_combined_minimum_size() const;
+
+ void set_custom_minimum_size(const Size2 &p_custom);
+ Size2 get_custom_minimum_size() const;
+
+ // Container sizing.
void set_h_size_flags(int p_flags);
int get_h_size_flags() const;
-
void set_v_size_flags(int p_flags);
int get_v_size_flags() const;
-
void set_stretch_ratio(real_t p_ratio);
real_t get_stretch_ratio() const;
- void update_minimum_size();
+ // Input events.
- /* FOCUS */
+ virtual void gui_input(const Ref<InputEvent> &p_event);
+ void accept_event();
+
+ virtual bool has_point(const Point2 &p_point) const;
+
+ void set_mouse_filter(MouseFilter p_filter);
+ MouseFilter get_mouse_filter() const;
+
+ void set_force_pass_scroll_events(bool p_force_pass_scroll_events);
+ bool is_force_pass_scroll_events() const;
+
+ void warp_mouse(const Point2 &p_position);
+
+ // Drag and drop handling.
+
+ virtual void set_drag_forwarding(Object *p_target);
+ virtual Variant get_drag_data(const Point2 &p_point);
+ virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const;
+ virtual void drop_data(const Point2 &p_point, const Variant &p_data);
+ void set_drag_preview(Control *p_control);
+ void force_drag(const Variant &p_data, Control *p_control);
+ bool is_drag_successful() const;
+
+ // Focus.
void set_focus_mode(FocusMode p_focus_mode);
FocusMode get_focus_mode() const;
bool has_focus() const;
void grab_focus();
+ void grab_click_focus();
void release_focus();
Control *find_next_valid_focus() const;
@@ -466,13 +510,25 @@ public:
void set_focus_previous(const NodePath &p_prev);
NodePath get_focus_previous() const;
- void set_mouse_filter(MouseFilter p_filter);
- MouseFilter get_mouse_filter() const;
+ // Rendering.
- void set_force_pass_scroll_events(bool p_force_pass_scroll_events);
- bool is_force_pass_scroll_events() const;
+ void set_default_cursor_shape(CursorShape p_shape);
+ CursorShape get_default_cursor_shape() const;
+ virtual CursorShape get_cursor_shape(const Point2 &p_pos = Point2i()) const;
+
+ void set_clip_contents(bool p_clip);
+ bool is_clipping_contents();
- /* SKINNING */
+ void set_disable_visibility_clip(bool p_ignore);
+ bool is_visibility_clip_disabled() const;
+
+ // Theming.
+
+ void set_theme(const Ref<Theme> &p_theme);
+ Ref<Theme> get_theme() const;
+
+ void set_theme_type_variation(const StringName &p_theme_type);
+ StringName get_theme_type_variation() const;
void begin_bulk_theme_override();
void end_bulk_theme_override();
@@ -520,44 +576,23 @@ public:
Ref<Font> get_theme_default_font() const;
int get_theme_default_font_size() const;
- /* TOOLTIP */
+ // Internationalization.
- void set_tooltip(const String &p_tooltip);
- virtual String get_tooltip(const Point2 &p_pos) const;
- virtual Control *make_custom_tooltip(const String &p_text) const;
-
- /* CURSOR */
-
- void set_default_cursor_shape(CursorShape p_shape);
- CursorShape get_default_cursor_shape() const;
- virtual CursorShape get_cursor_shape(const Point2 &p_pos = Point2i()) const;
-
- virtual Transform2D get_transform() const override;
-
- bool is_top_level_control() const;
-
- Size2 get_parent_area_size() const;
- Rect2 get_parent_anchorable_rect() const;
-
- void grab_click_focus();
-
- void warp_mouse(const Point2 &p_position);
-
- virtual bool is_text_field() const;
-
- Control *get_root_parent_control() const;
-
- void set_clip_contents(bool p_clip);
- bool is_clipping_contents();
+ void set_layout_direction(LayoutDirection p_direction);
+ LayoutDirection get_layout_direction() const;
+ virtual bool is_layout_rtl() const;
- void set_block_minimum_size_adjust(bool p_block);
- bool is_minimum_size_adjust_blocked() const;
+ void set_auto_translate(bool p_enable);
+ bool is_auto_translating() const;
+ _FORCE_INLINE_ String atr(const String p_string) const {
+ return is_auto_translating() ? tr(p_string) : p_string;
+ };
- void set_disable_visibility_clip(bool p_ignore);
- bool is_visibility_clip_disabled() const;
+ // Extra properties.
- virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override;
- TypedArray<String> get_configuration_warnings() const override;
+ void set_tooltip(const String &p_tooltip);
+ virtual String get_tooltip(const Point2 &p_pos) const;
+ virtual Control *make_custom_tooltip(const String &p_text) const;
Control() {}
};
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 06553cd0f6..630a3316d6 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -443,8 +443,10 @@ void TextEdit::_notification(int p_what) {
case NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
case NOTIFICATION_TRANSLATION_CHANGED:
case NOTIFICATION_THEME_CHANGED: {
- _update_caches();
- _update_wrap_at_column(true);
+ if (is_inside_tree()) {
+ _update_caches();
+ _update_wrap_at_column(true);
+ }
} break;
case NOTIFICATION_WM_WINDOW_FOCUS_IN: {
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index c2fa1ace8d..7876b00202 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -1234,13 +1234,23 @@ void Viewport::_gui_show_tooltip() {
Rect2i vr = window->get_usable_parent_rect();
if (r.size.x + r.position.x > vr.size.x + vr.position.x) {
- r.position.x = vr.position.x + vr.size.x - r.size.x;
+ // Place it in the opposite direction. If it fails, just hug the border.
+ r.position.x = gui.tooltip_pos.x - r.size.x - tooltip_offset.x;
+
+ if (r.position.x < vr.position.x) {
+ r.position.x = vr.position.x + vr.size.x - r.size.x;
+ }
} else if (r.position.x < vr.position.x) {
r.position.x = vr.position.x;
}
if (r.size.y + r.position.y > vr.size.y + vr.position.y) {
- r.position.y = vr.position.y + vr.size.y - r.size.y;
+ // Same as above.
+ r.position.y = gui.tooltip_pos.y - r.size.y - tooltip_offset.y;
+
+ if (r.position.y < vr.position.y) {
+ r.position.y = vr.position.y + vr.size.y - r.size.y;
+ }
} else if (r.position.y < vr.position.y) {
r.position.y = vr.position.y;
}
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index 09a283ea53..ef5ac36114 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -870,6 +870,7 @@ void register_scene_types() {
GDREGISTER_ABSTRACT_CLASS(Font);
GDREGISTER_CLASS(FontFile);
GDREGISTER_CLASS(FontVariation);
+ GDREGISTER_CLASS(SystemFont);
GDREGISTER_CLASS(Curve);
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index f61ac7fcaa..c469946b45 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -79,9 +79,9 @@ void Font::_bind_methods() {
ClassDB::bind_method(D_METHOD("draw_multiline_string_outline", "canvas_item", "pos", "text", "alignment", "width", "font_size", "max_lines", "size", "modulate", "brk_flags", "jst_flags", "direction", "orientation"), &Font::draw_multiline_string_outline, DEFVAL(HORIZONTAL_ALIGNMENT_LEFT), DEFVAL(-1), DEFVAL(DEFAULT_FONT_SIZE), DEFVAL(-1), DEFVAL(1), DEFVAL(Color(1.0, 1.0, 1.0)), DEFVAL(TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND), DEFVAL(TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND), DEFVAL(TextServer::DIRECTION_AUTO), DEFVAL(TextServer::ORIENTATION_HORIZONTAL));
// Drawing char.
- ClassDB::bind_method(D_METHOD("get_char_size", "char"), &Font::get_char_size);
- ClassDB::bind_method(D_METHOD("draw_char", "canvas_item", "pos", "char", "modulate"), &Font::draw_char, DEFVAL(Color(1.0, 1.0, 1.0)));
- ClassDB::bind_method(D_METHOD("draw_char_outline", "canvas_item", "pos", "char", "size", "modulate"), &Font::draw_char_outline, DEFVAL(-1), DEFVAL(Color(1.0, 1.0, 1.0)));
+ ClassDB::bind_method(D_METHOD("get_char_size", "char", "font_size"), &Font::get_char_size);
+ ClassDB::bind_method(D_METHOD("draw_char", "canvas_item", "pos", "char", "font_size", "modulate"), &Font::draw_char, DEFVAL(Color(1.0, 1.0, 1.0)));
+ ClassDB::bind_method(D_METHOD("draw_char_outline", "canvas_item", "pos", "char", "font_size", "size", "modulate"), &Font::draw_char_outline, DEFVAL(-1), DEFVAL(Color(1.0, 1.0, 1.0)));
// Helper functions.
ClassDB::bind_method(D_METHOD("has_char", "char"), &Font::has_char);
@@ -2693,3 +2693,374 @@ FontVariation::FontVariation() {
FontVariation::~FontVariation() {
reset_state();
}
+
+/*************************************************************************/
+/* SystemFont */
+/*************************************************************************/
+
+void SystemFont::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_antialiased", "antialiased"), &SystemFont::set_antialiased);
+ ClassDB::bind_method(D_METHOD("is_antialiased"), &SystemFont::is_antialiased);
+
+ ClassDB::bind_method(D_METHOD("set_generate_mipmaps", "generate_mipmaps"), &SystemFont::set_generate_mipmaps);
+ ClassDB::bind_method(D_METHOD("get_generate_mipmaps"), &SystemFont::get_generate_mipmaps);
+
+ ClassDB::bind_method(D_METHOD("set_force_autohinter", "force_autohinter"), &SystemFont::set_force_autohinter);
+ ClassDB::bind_method(D_METHOD("is_force_autohinter"), &SystemFont::is_force_autohinter);
+
+ ClassDB::bind_method(D_METHOD("set_hinting", "hinting"), &SystemFont::set_hinting);
+ ClassDB::bind_method(D_METHOD("get_hinting"), &SystemFont::get_hinting);
+
+ ClassDB::bind_method(D_METHOD("set_subpixel_positioning", "subpixel_positioning"), &SystemFont::set_subpixel_positioning);
+ ClassDB::bind_method(D_METHOD("get_subpixel_positioning"), &SystemFont::get_subpixel_positioning);
+
+ ClassDB::bind_method(D_METHOD("set_oversampling", "oversampling"), &SystemFont::set_oversampling);
+ ClassDB::bind_method(D_METHOD("get_oversampling"), &SystemFont::get_oversampling);
+
+ ClassDB::bind_method(D_METHOD("get_font_names"), &SystemFont::get_font_names);
+ ClassDB::bind_method(D_METHOD("set_font_names", "names"), &SystemFont::set_font_names);
+
+ ClassDB::bind_method(D_METHOD("set_font_style", "style"), &SystemFont::set_font_style);
+
+ ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "font_names"), "set_font_names", "get_font_names");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "font_style", PROPERTY_HINT_FLAGS, "Bold,Italic"), "set_font_style", "get_font_style");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased"), "set_antialiased", "is_antialiased");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "generate_mipmaps"), "set_generate_mipmaps", "get_generate_mipmaps");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "force_autohinter"), "set_force_autohinter", "is_force_autohinter");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "hinting", PROPERTY_HINT_ENUM, "None,Light,Normal"), "set_hinting", "get_hinting");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "subpixel_positioning", PROPERTY_HINT_ENUM, "Disabled,Auto,One half of a pixel,One quarter of a pixel"), "set_subpixel_positioning", "get_subpixel_positioning");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "oversampling", PROPERTY_HINT_RANGE, "0,10,0.1"), "set_oversampling", "get_oversampling");
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "fallbacks", PROPERTY_HINT_ARRAY_TYPE, vformat("%s/%s:%s", Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "Font")), "set_fallbacks", "get_fallbacks");
+}
+
+void SystemFont::_update_rids() const {
+ Ref<Font> f = _get_base_font_or_default();
+
+ rids.clear();
+ if (fallbacks.is_empty() && f.is_valid()) {
+ RID rid = _get_rid();
+ if (rid.is_valid()) {
+ rids.push_back(rid);
+ }
+
+ const TypedArray<Font> &base_fallbacks = f->get_fallbacks();
+ for (int i = 0; i < base_fallbacks.size(); i++) {
+ _update_rids_fb(base_fallbacks[i], 0);
+ }
+ } else {
+ _update_rids_fb(const_cast<SystemFont *>(this), 0);
+ }
+ dirty_rids = false;
+}
+
+void SystemFont::_update_base_font() {
+ if (base_font.is_valid()) {
+ base_font->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(this), &Font::_invalidate_rids));
+ base_font.unref();
+ }
+
+ face_indeces.clear();
+ ftr_weight = 0;
+ ftr_italic = 0;
+ for (const String &E : names) {
+ if (E.is_empty()) {
+ continue;
+ }
+
+ String path = OS::get_singleton()->get_system_font_path(E, style & TextServer::FONT_BOLD, style & TextServer::FONT_ITALIC);
+ if (path.is_empty()) {
+ continue;
+ }
+ Ref<FontFile> file;
+ file.instantiate();
+ Error err = file->load_dynamic_font(path);
+ if (err != OK) {
+ continue;
+ }
+
+ // If it's a font collection check all faces to match requested style.
+ for (int i = 0; i < file->get_face_count(); i++) {
+ file->set_face_index(0, i);
+ if (((file->get_font_style() & TextServer::FONT_BOLD) == (style & TextServer::FONT_BOLD)) && ((file->get_font_style() & TextServer::FONT_ITALIC) == (style & TextServer::FONT_ITALIC))) {
+ face_indeces.push_back(i);
+ }
+ }
+ if (face_indeces.is_empty()) {
+ face_indeces.push_back(0);
+ }
+ file->set_face_index(0, face_indeces[0]);
+
+ // If it's a variable font, apply weight and italic coordinates to match requested style.
+ Dictionary ftr = file->get_supported_variation_list();
+ if ((style & TextServer::FONT_BOLD) && ftr.has(TS->name_to_tag("weight"))) {
+ ftr_weight = 700;
+ }
+ if ((style & TextServer::FONT_ITALIC) && ftr.has(TS->name_to_tag("italic"))) {
+ ftr_italic = 1;
+ }
+
+ // Apply font rendering settings.
+ file->set_antialiased(antialiased);
+ file->set_generate_mipmaps(mipmaps);
+ file->set_force_autohinter(force_autohinter);
+ file->set_hinting(hinting);
+ file->set_subpixel_positioning(subpixel_positioning);
+ file->set_oversampling(oversampling);
+
+ base_font = file;
+ }
+
+ if (base_font.is_valid()) {
+ base_font->connect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(this), &Font::_invalidate_rids), varray(), CONNECT_REFERENCE_COUNTED);
+ }
+
+ _invalidate_rids();
+ notify_property_list_changed();
+}
+
+void SystemFont::reset_state() {
+ if (base_font.is_valid()) {
+ base_font->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(this), &Font::_invalidate_rids));
+ base_font.unref();
+ }
+
+ if (theme_font.is_valid()) {
+ theme_font->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(this), &Font::_invalidate_rids));
+ theme_font.unref();
+ }
+
+ names.clear();
+ face_indeces.clear();
+ ftr_weight = 0;
+ ftr_italic = 0;
+ style = 0;
+ antialiased = true;
+ mipmaps = false;
+ force_autohinter = false;
+ hinting = TextServer::HINTING_LIGHT;
+ subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_DISABLED;
+ oversampling = 0.f;
+
+ Font::reset_state();
+}
+
+Ref<Font> SystemFont::_get_base_font_or_default() const {
+ if (theme_font.is_valid()) {
+ theme_font->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(const_cast<SystemFont *>(this)), &Font::_invalidate_rids));
+ theme_font.unref();
+ }
+
+ if (base_font.is_valid()) {
+ return base_font;
+ }
+
+ // Check the project-defined Theme resource.
+ if (Theme::get_project_default().is_valid()) {
+ List<StringName> theme_types;
+ Theme::get_project_default()->get_type_dependencies(get_class_name(), StringName(), &theme_types);
+
+ for (const StringName &E : theme_types) {
+ if (Theme::get_project_default()->has_theme_item(Theme::DATA_TYPE_FONT, "font", E)) {
+ Ref<Font> f = Theme::get_project_default()->get_theme_item(Theme::DATA_TYPE_FONT, "font", E);
+ if (f.is_valid()) {
+ theme_font = f;
+ theme_font->connect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(const_cast<SystemFont *>(this)), &Font::_invalidate_rids), varray(), CONNECT_REFERENCE_COUNTED);
+ }
+ return f;
+ }
+ }
+ }
+
+ // Lastly, fall back on the items defined in the default Theme, if they exist.
+ if (Theme::get_default().is_valid()) {
+ List<StringName> theme_types;
+ Theme::get_default()->get_type_dependencies(get_class_name(), StringName(), &theme_types);
+
+ for (const StringName &E : theme_types) {
+ if (Theme::get_default()->has_theme_item(Theme::DATA_TYPE_FONT, "font", E)) {
+ Ref<Font> f = Theme::get_default()->get_theme_item(Theme::DATA_TYPE_FONT, "font", E);
+ if (f.is_valid()) {
+ theme_font = f;
+ theme_font->connect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(const_cast<SystemFont *>(this)), &Font::_invalidate_rids), varray(), CONNECT_REFERENCE_COUNTED);
+ }
+ return f;
+ }
+ }
+
+ // If they don't exist, use any type to return the default/empty value.
+ Ref<Font> f = Theme::get_default()->get_theme_item(Theme::DATA_TYPE_FONT, "font", StringName());
+ if (f.is_valid()) {
+ theme_font = f;
+ theme_font->connect(CoreStringNames::get_singleton()->changed, callable_mp(reinterpret_cast<Font *>(const_cast<SystemFont *>(this)), &Font::_invalidate_rids), varray(), CONNECT_REFERENCE_COUNTED);
+ }
+ return f;
+ }
+
+ return Ref<Font>();
+}
+
+void SystemFont::set_antialiased(bool p_antialiased) {
+ if (antialiased != p_antialiased) {
+ antialiased = p_antialiased;
+ if (base_font.is_valid()) {
+ base_font->set_antialiased(antialiased);
+ }
+ emit_changed();
+ }
+}
+
+bool SystemFont::is_antialiased() const {
+ return antialiased;
+}
+
+void SystemFont::set_generate_mipmaps(bool p_generate_mipmaps) {
+ if (mipmaps != p_generate_mipmaps) {
+ mipmaps = p_generate_mipmaps;
+ if (base_font.is_valid()) {
+ base_font->set_generate_mipmaps(mipmaps);
+ }
+ emit_changed();
+ }
+}
+
+bool SystemFont::get_generate_mipmaps() const {
+ return mipmaps;
+}
+
+void SystemFont::set_force_autohinter(bool p_force_autohinter) {
+ if (force_autohinter != p_force_autohinter) {
+ force_autohinter = p_force_autohinter;
+ if (base_font.is_valid()) {
+ base_font->set_force_autohinter(force_autohinter);
+ }
+ emit_changed();
+ }
+}
+
+bool SystemFont::is_force_autohinter() const {
+ return force_autohinter;
+}
+
+void SystemFont::set_hinting(TextServer::Hinting p_hinting) {
+ if (hinting != p_hinting) {
+ hinting = p_hinting;
+ if (base_font.is_valid()) {
+ base_font->set_hinting(hinting);
+ }
+ emit_changed();
+ }
+}
+
+TextServer::Hinting SystemFont::get_hinting() const {
+ return hinting;
+}
+
+void SystemFont::set_subpixel_positioning(TextServer::SubpixelPositioning p_subpixel) {
+ if (subpixel_positioning != p_subpixel) {
+ subpixel_positioning = p_subpixel;
+ if (base_font.is_valid()) {
+ base_font->set_subpixel_positioning(subpixel_positioning);
+ }
+ emit_changed();
+ }
+}
+
+TextServer::SubpixelPositioning SystemFont::get_subpixel_positioning() const {
+ return subpixel_positioning;
+}
+
+void SystemFont::set_oversampling(real_t p_oversampling) {
+ if (oversampling != p_oversampling) {
+ oversampling = p_oversampling;
+ if (base_font.is_valid()) {
+ base_font->set_oversampling(oversampling);
+ }
+ emit_changed();
+ }
+}
+
+real_t SystemFont::get_oversampling() const {
+ return oversampling;
+}
+
+void SystemFont::set_font_names(const PackedStringArray &p_names) {
+ if (names != p_names) {
+ names = p_names;
+ _update_base_font();
+ }
+}
+
+PackedStringArray SystemFont::get_font_names() const {
+ return names;
+}
+
+void SystemFont::set_font_style(BitField<TextServer::FontStyle> p_style) {
+ if (style != p_style) {
+ style = p_style;
+ _update_base_font();
+ }
+}
+
+BitField<TextServer::FontStyle> SystemFont::get_font_style() const {
+ return style;
+}
+
+int SystemFont::get_spacing(TextServer::SpacingType p_spacing) const {
+ if (base_font.is_valid()) {
+ return base_font->get_spacing(p_spacing);
+ } else {
+ return 0;
+ }
+}
+
+RID SystemFont::find_variation(const Dictionary &p_variation_coordinates, int p_face_index, float p_strength, Transform2D p_transform) const {
+ Ref<Font> f = _get_base_font_or_default();
+ if (f.is_valid()) {
+ Dictionary var = p_variation_coordinates;
+ if (ftr_weight > 0 && !var.has(TS->name_to_tag("weight"))) {
+ var[TS->name_to_tag("weight")] = ftr_weight;
+ }
+ if (ftr_italic > 0 && !var.has(TS->name_to_tag("italic"))) {
+ var[TS->name_to_tag("italic")] = ftr_italic;
+ }
+
+ if (!face_indeces.is_empty()) {
+ int face_index = CLAMP(p_face_index, 0, face_indeces.size() - 1);
+ return f->find_variation(var, face_indeces[face_index], p_strength, p_transform);
+ } else {
+ return f->find_variation(var, 0, p_strength, p_transform);
+ }
+ }
+ return RID();
+}
+
+RID SystemFont::_get_rid() const {
+ Ref<Font> f = _get_base_font_or_default();
+ if (f.is_valid()) {
+ if (!face_indeces.is_empty()) {
+ Dictionary var;
+ if (ftr_weight > 0) {
+ var[TS->name_to_tag("weight")] = ftr_weight;
+ }
+ if (ftr_italic > 0) {
+ var[TS->name_to_tag("italic")] = ftr_italic;
+ }
+ return f->find_variation(var, face_indeces[0]);
+ } else {
+ return f->_get_rid();
+ }
+ }
+ return RID();
+}
+
+int64_t SystemFont::get_face_count() const {
+ return face_indeces.size();
+}
+
+SystemFont::SystemFont() {
+ /* NOP */
+}
+
+SystemFont::~SystemFont() {
+ reset_state();
+}
diff --git a/scene/resources/font.h b/scene/resources/font.h
index 8a2f83c414..260b4e521f 100644
--- a/scene/resources/font.h
+++ b/scene/resources/font.h
@@ -41,7 +41,7 @@ class TextLine;
class TextParagraph;
/*************************************************************************/
-/* Font */
+/* Font */
/*************************************************************************/
class Font : public Resource {
@@ -381,4 +381,74 @@ public:
~FontVariation();
};
+/*************************************************************************/
+/* SystemFont */
+/*************************************************************************/
+
+class SystemFont : public Font {
+ GDCLASS(SystemFont, Font);
+
+ PackedStringArray names;
+ BitField<TextServer::FontStyle> style = 0;
+
+ mutable Ref<Font> theme_font;
+
+ Ref<FontFile> base_font;
+ Vector<int> face_indeces;
+ int ftr_weight = 0;
+ int ftr_italic = 0;
+
+ bool antialiased = true;
+ bool mipmaps = false;
+ bool force_autohinter = false;
+ TextServer::Hinting hinting = TextServer::HINTING_LIGHT;
+ TextServer::SubpixelPositioning subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_AUTO;
+ real_t oversampling = 0.f;
+
+protected:
+ static void _bind_methods();
+
+ virtual void _update_base_font();
+ virtual void _update_rids() const override;
+
+ virtual void reset_state() override;
+
+public:
+ virtual Ref<Font> _get_base_font_or_default() const;
+
+ virtual void set_antialiased(bool p_antialiased);
+ virtual bool is_antialiased() const;
+
+ virtual void set_generate_mipmaps(bool p_generate_mipmaps);
+ virtual bool get_generate_mipmaps() const;
+
+ virtual void set_force_autohinter(bool p_force_autohinter);
+ virtual bool is_force_autohinter() const;
+
+ virtual void set_hinting(TextServer::Hinting p_hinting);
+ virtual TextServer::Hinting get_hinting() const;
+
+ virtual void set_subpixel_positioning(TextServer::SubpixelPositioning p_subpixel);
+ virtual TextServer::SubpixelPositioning get_subpixel_positioning() const;
+
+ virtual void set_oversampling(real_t p_oversampling);
+ virtual real_t get_oversampling() const;
+
+ virtual void set_font_names(const PackedStringArray &p_names);
+ virtual PackedStringArray get_font_names() const;
+
+ virtual void set_font_style(BitField<TextServer::FontStyle> p_style);
+ virtual BitField<TextServer::FontStyle> get_font_style() const override;
+
+ virtual int get_spacing(TextServer::SpacingType p_spacing) const override;
+
+ virtual RID find_variation(const Dictionary &p_variation_coordinates, int p_face_index = 0, float p_strength = 0.0, Transform2D p_transform = Transform2D()) const override;
+ virtual RID _get_rid() const override;
+
+ int64_t get_face_count() const override;
+
+ SystemFont();
+ ~SystemFont();
+};
+
#endif // FONT_H
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index b7a3b677f5..f07232a3ad 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -202,7 +202,98 @@ bool ShaderMaterial::_get(const StringName &p_name, Variant &r_ret) const {
void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
if (!shader.is_null()) {
- shader->get_param_list(p_list);
+ List<PropertyInfo> list;
+ shader->get_param_list(&list, true);
+
+ HashMap<String, HashMap<String, List<PropertyInfo>>> groups;
+ {
+ HashMap<String, List<PropertyInfo>> none_subgroup;
+ none_subgroup.insert("<None>", List<PropertyInfo>());
+ groups.insert("<None>", none_subgroup);
+ }
+
+ String last_group = "<None>";
+ String last_subgroup = "<None>";
+
+ bool is_none_group_undefined = true;
+ bool is_none_group = true;
+
+ for (List<PropertyInfo>::Element *E = list.front(); E; E = E->next()) {
+ if (E->get().usage == PROPERTY_USAGE_GROUP) {
+ if (!E->get().name.is_empty()) {
+ Vector<String> vgroup = E->get().name.split("::");
+ last_group = vgroup[0];
+ if (vgroup.size() > 1) {
+ last_subgroup = vgroup[1];
+ } else {
+ last_subgroup = "<None>";
+ }
+ is_none_group = false;
+
+ if (!groups.has(last_group)) {
+ PropertyInfo info;
+ info.usage = PROPERTY_USAGE_GROUP;
+ info.name = last_group;
+
+ List<PropertyInfo> none_subgroup;
+ none_subgroup.push_back(info);
+
+ HashMap<String, List<PropertyInfo>> subgroup_map;
+ subgroup_map.insert("<None>", none_subgroup);
+
+ groups.insert(last_group, subgroup_map);
+ }
+
+ if (!groups[last_group].has(last_subgroup)) {
+ PropertyInfo info;
+ info.usage = PROPERTY_USAGE_SUBGROUP;
+ info.name = last_subgroup;
+
+ List<PropertyInfo> subgroup;
+ subgroup.push_back(info);
+
+ groups[last_group].insert(last_subgroup, subgroup);
+ }
+ } else {
+ last_group = "<None>";
+ last_subgroup = "<None>";
+ is_none_group = true;
+ }
+ continue; // Pass group.
+ }
+
+ if (is_none_group_undefined && is_none_group) {
+ is_none_group_undefined = false;
+
+ PropertyInfo info;
+ info.usage = PROPERTY_USAGE_GROUP;
+ info.name = "Shader Param";
+ groups["<None>"]["<None>"].push_back(info);
+ }
+
+ PropertyInfo info = E->get();
+ info.name = info.name;
+ groups[last_group][last_subgroup].push_back(info);
+ }
+
+ // Sort groups alphabetically.
+ List<UniformProp> props;
+ for (HashMap<String, HashMap<String, List<PropertyInfo>>>::Iterator group = groups.begin(); group; ++group) {
+ for (HashMap<String, List<PropertyInfo>>::Iterator subgroup = group->value.begin(); subgroup; ++subgroup) {
+ for (List<PropertyInfo>::Element *item = subgroup->value.front(); item; item = item->next()) {
+ if (subgroup->key == "<None>") {
+ props.push_back({ group->key, item->get() });
+ } else {
+ props.push_back({ group->key + "::" + subgroup->key, item->get() });
+ }
+ }
+ }
+ }
+ props.sort_custom<UniformPropComparator>();
+
+ for (List<UniformProp>::Element *E = props.front(); E; E = E->next()) {
+ p_list->push_back(E->get().info);
+ }
}
}
diff --git a/scene/resources/material.h b/scene/resources/material.h
index 905e604e95..8c04817c6b 100644
--- a/scene/resources/material.h
+++ b/scene/resources/material.h
@@ -84,6 +84,17 @@ class ShaderMaterial : public Material {
HashMap<StringName, Variant> param_cache;
+ struct UniformProp {
+ String str;
+ PropertyInfo info;
+ };
+
+ struct UniformPropComparator {
+ bool operator()(const UniformProp &p_a, const UniformProp &p_b) const {
+ return p_a.str.naturalnocasecmp_to(p_b.str) < 0;
+ }
+ };
+
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp
index 16117986fe..74031e02d7 100644
--- a/scene/resources/shader.cpp
+++ b/scene/resources/shader.cpp
@@ -103,7 +103,7 @@ String Shader::get_code() const {
return code;
}
-void Shader::get_param_list(List<PropertyInfo> *p_params) const {
+void Shader::get_param_list(List<PropertyInfo> *p_params, bool p_get_groups) const {
_update_shader();
List<PropertyInfo> local;
@@ -112,12 +112,16 @@ void Shader::get_param_list(List<PropertyInfo> *p_params) const {
params_cache_dirty = false;
for (PropertyInfo &pi : local) {
- if (default_textures.has(pi.name)) { //do not show default textures
+ bool is_group = pi.usage == PROPERTY_USAGE_GROUP || pi.usage == PROPERTY_USAGE_SUBGROUP;
+ if (!p_get_groups && is_group) {
continue;
}
- String original_name = pi.name;
- pi.name = "shader_param/" + pi.name;
- params_cache[pi.name] = original_name;
+ if (!is_group) {
+ if (default_textures.has(pi.name)) { //do not show default textures
+ continue;
+ }
+ params_cache[pi.name] = pi.name;
+ }
if (p_params) {
//small little hack
if (pi.type == Variant::RID) {
diff --git a/scene/resources/shader.h b/scene/resources/shader.h
index 5de8ad5518..7aa14651a5 100644
--- a/scene/resources/shader.h
+++ b/scene/resources/shader.h
@@ -78,7 +78,7 @@ public:
void set_code(const String &p_code);
String get_code() const;
- void get_param_list(List<PropertyInfo> *p_params) const;
+ void get_param_list(List<PropertyInfo> *p_params, bool p_get_groups = false) const;
bool has_param(const StringName &p_param) const;
void set_default_texture_param(const StringName &p_param, const Ref<Texture2D> &p_texture, int p_index = 0);
diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp
index 22b5ef0108..a59870f4a9 100644
--- a/scene/resources/tile_set.cpp
+++ b/scene/resources/tile_set.cpp
@@ -2467,9 +2467,42 @@ Vector<Point2> TileSet::_get_half_offset_side_terrain_peering_bit_polygon(Vector
}
void TileSet::reset_state() {
+ // Rendering
occlusion_layers.clear();
+ tile_lines_mesh.instantiate();
+ tile_filled_mesh.instantiate();
+ tile_meshes_dirty = true;
+
+ // Physics
physics_layers.clear();
+
+ // Terrains
+ terrain_sets.clear();
+ terrain_meshes.clear();
+ terrain_peering_bits_meshes.clear();
+ per_terrain_pattern_tiles.clear();
+ terrains_cache_dirty = true;
+
+ // Navigation
+ navigation_layers.clear();
+
custom_data_layers.clear();
+ custom_data_layers_by_name.clear();
+
+ // Proxies
+ source_level_proxies.clear();
+ coords_level_proxies.clear();
+ alternative_level_proxies.clear();
+
+#ifndef DISABLE_DEPRECATED
+ for (const KeyValue<int, CompatibilityTileData *> &E : compatibility_data) {
+ memdelete(E.value);
+ }
+ compatibility_data.clear();
+#endif // DISABLE_DEPRECATED
+ while (!source_ids.is_empty()) {
+ remove_source(source_ids[0]);
+ }
}
const Vector2i TileSetSource::INVALID_ATLAS_COORDS = Vector2i(-1, -1);
@@ -3457,6 +3490,10 @@ void TileSetSource::set_tile_set(const TileSet *p_tile_set) {
tile_set = p_tile_set;
}
+void TileSetSource::reset_state() {
+ tile_set = nullptr;
+};
+
void TileSetSource::_bind_methods() {
// Base tiles
ClassDB::bind_method(D_METHOD("get_tiles_count"), &TileSetSource::get_tiles_count);
@@ -3640,12 +3677,17 @@ void TileSetAtlasSource::remove_custom_data_layer(int p_index) {
}
void TileSetAtlasSource::reset_state() {
- // Reset all TileData.
+ tile_set = nullptr;
+
for (KeyValue<Vector2i, TileAlternativesData> &E_tile : tiles) {
- for (KeyValue<int, TileData *> &E_alternative : E_tile.value.alternatives) {
- E_alternative.value->reset_state();
+ for (const KeyValue<int, TileData *> &E_tile_data : E_tile.value.alternatives) {
+ memdelete(E_tile_data.value);
}
}
+ _coords_mapping_cache.clear();
+ tiles.clear();
+ tiles_ids.clear();
+ _queue_update_padded_texture();
}
void TileSetAtlasSource::set_texture(Ref<Texture2D> p_texture) {
@@ -4975,13 +5017,6 @@ void TileData::remove_custom_data_layer(int p_index) {
custom_data.remove_at(p_index);
}
-void TileData::reset_state() {
- occluders.clear();
- physics.clear();
- navigation.clear();
- custom_data.clear();
-}
-
void TileData::set_allow_transform(bool p_allow_transform) {
allow_transform = p_allow_transform;
}
diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h
index 7368d2bd87..bfd21190d8 100644
--- a/scene/resources/tile_set.h
+++ b/scene/resources/tile_set.h
@@ -569,7 +569,7 @@ public:
virtual void add_custom_data_layer(int p_index){};
virtual void move_custom_data_layer(int p_from_index, int p_to_pos){};
virtual void remove_custom_data_layer(int p_index){};
- virtual void reset_state() override{};
+ virtual void reset_state() override;
// Tiles.
virtual int get_tiles_count() const = 0;
@@ -847,7 +847,6 @@ public:
void add_custom_data_layer(int p_index);
void move_custom_data_layer(int p_from_index, int p_to_pos);
void remove_custom_data_layer(int p_index);
- void reset_state();
void set_allow_transform(bool p_allow_transform);
bool is_allowing_transform() const;
diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp
index b68cce9dda..3cf643221b 100644
--- a/scene/resources/visual_shader.cpp
+++ b/scene/resources/visual_shader.cpp
@@ -967,6 +967,12 @@ void VisualShader::connect_nodes_forced(Type p_type, int p_from_node, int p_from
ERR_FAIL_COND(!g->nodes.has(p_to_node));
ERR_FAIL_INDEX(p_to_port, g->nodes[p_to_node].node->get_input_port_count());
+ for (const Connection &E : g->connections) {
+ if (E.from_node == p_from_node && E.from_port == p_from_port && E.to_node == p_to_node && E.to_port == p_to_port) {
+ return;
+ }
+ }
+
Connection c;
c.from_node = p_from_node;
c.from_port = p_from_port;
diff --git a/servers/movie_writer/movie_writer.cpp b/servers/movie_writer/movie_writer.cpp
index 9f96b8cfda..93f9f8ea08 100644
--- a/servers/movie_writer/movie_writer.cpp
+++ b/servers/movie_writer/movie_writer.cpp
@@ -30,6 +30,8 @@
#include "movie_writer.h"
#include "core/config/project_settings.h"
+#include "core/io/dir_access.h"
+#include "servers/display_server.h"
MovieWriter *MovieWriter::writers[MovieWriter::MAX_WRITERS];
uint32_t MovieWriter::writer_count = 0;
@@ -101,6 +103,7 @@ void MovieWriter::get_supported_extensions(List<String> *r_extensions) const {
}
void MovieWriter::begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) {
+ project_name = GLOBAL_GET("application/config/name");
mix_rate = get_audio_mix_rate();
AudioDriverDummy::get_dummy_singleton()->set_mix_rate(mix_rate);
AudioDriverDummy::get_dummy_singleton()->set_speaker_mode(AudioDriver::SpeakerMode(get_audio_speaker_mode()));
@@ -162,6 +165,18 @@ void MovieWriter::set_extensions_hint() {
}
void MovieWriter::add_frame(const Ref<Image> &p_image) {
+ const int movie_time_seconds = Engine::get_singleton()->get_frames_drawn() / fps;
+ const String movie_time = vformat("%s:%s:%s",
+ String::num(movie_time_seconds / 3600).pad_zeros(2),
+ String::num((movie_time_seconds % 3600) / 60).pad_zeros(2),
+ String::num(movie_time_seconds % 60).pad_zeros(2));
+
+#ifdef DEBUG_ENABLED
+ DisplayServer::get_singleton()->window_set_title(vformat("MovieWriter: Frame %d (time: %s) - %s (DEBUG)", Engine::get_singleton()->get_frames_drawn(), movie_time, project_name));
+#else
+ DisplayServer::get_singleton()->window_set_title(vformat("MovieWriter: Frame %d (time: %s) - %s", Engine::get_singleton()->get_frames_drawn(), movie_time, project_name));
+#endif
+
AudioDriverDummy::get_dummy_singleton()->mix_audio(mix_rate / fps, audio_mix_buffer.ptr());
write_frame(p_image, audio_mix_buffer.ptr());
}
diff --git a/servers/movie_writer/movie_writer.h b/servers/movie_writer/movie_writer.h
index 1ec6e93052..7877a60715 100644
--- a/servers/movie_writer/movie_writer.h
+++ b/servers/movie_writer/movie_writer.h
@@ -42,6 +42,8 @@ class MovieWriter : public Object {
uint64_t mix_rate = 0;
uint32_t audio_channels = 0;
+ String project_name;
+
LocalVector<int32_t> audio_mix_buffer;
enum {
diff --git a/servers/rendering/dummy/rasterizer_scene_dummy.h b/servers/rendering/dummy/rasterizer_scene_dummy.h
index b803dd6f96..9a376b8806 100644
--- a/servers/rendering/dummy/rasterizer_scene_dummy.h
+++ b/servers/rendering/dummy/rasterizer_scene_dummy.h
@@ -35,33 +35,10 @@
class RasterizerSceneDummy : public RendererSceneRender {
public:
- GeometryInstance *geometry_instance_create(RID p_base) override { return nullptr; }
- void geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) override {}
- void geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) override {}
- void geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_override) override {}
- void geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_material) override {}
- void geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) override {}
- void geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabbb) override {}
- void geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) override {}
- void geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) override {}
- void geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) override {}
- void geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) override {}
- void geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override {}
- void geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) override {}
- void geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) override {}
- void geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) override {}
- void geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) override {}
- void geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) override {}
- void geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) override {}
+ RenderGeometryInstance *geometry_instance_create(RID p_base) override { return nullptr; }
+ void geometry_instance_free(RenderGeometryInstance *p_geometry_instance) override {}
uint32_t geometry_instance_get_pair_mask() override { return 0; }
- void geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) override {}
- void geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override {}
- void geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) override {}
- void geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override {}
- void geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) override {}
-
- void geometry_instance_free(GeometryInstance *p_geometry_instance) override {}
/* SHADOW ATLAS API */
@@ -179,13 +156,13 @@ public:
RID voxel_gi_instance_create(RID p_voxel_gi) override { return RID(); }
void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) override {}
bool voxel_gi_needs_update(RID p_probe) const override { return false; }
- void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects) override {}
+ void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects) override {}
void voxel_gi_set_quality(RS::VoxelGIQuality) override {}
- void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_info = nullptr) override {}
- void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override {}
- void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<GeometryInstance *> &p_instances) override {}
+ void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_info = nullptr) override {}
+ void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override {}
+ void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<RenderGeometryInstance *> &p_instances) override {}
void set_scene_pass(uint64_t p_pass) override {}
void set_time(double p_time, double p_step) override {}
diff --git a/servers/rendering/renderer_geometry_instance.cpp b/servers/rendering/renderer_geometry_instance.cpp
new file mode 100644
index 0000000000..3a9bab022c
--- /dev/null
+++ b/servers/rendering/renderer_geometry_instance.cpp
@@ -0,0 +1,138 @@
+/*************************************************************************/
+/* renderer_geometry_instance.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "servers/rendering/renderer_geometry_instance.h"
+
+void RenderGeometryInstanceBase::set_skeleton(RID p_skeleton) {
+ data->skeleton = p_skeleton;
+
+ _mark_dirty();
+ data->dirty_dependencies = true;
+}
+
+void RenderGeometryInstanceBase::set_material_override(RID p_override) {
+ data->material_override = p_override;
+
+ _mark_dirty();
+ data->dirty_dependencies = true;
+}
+
+void RenderGeometryInstanceBase::set_material_overlay(RID p_overlay) {
+ data->material_overlay = p_overlay;
+
+ _mark_dirty();
+ data->dirty_dependencies = true;
+}
+
+void RenderGeometryInstanceBase::set_surface_materials(const Vector<RID> &p_materials) {
+ data->surface_materials = p_materials;
+
+ _mark_dirty();
+ data->dirty_dependencies = true;
+}
+
+void RenderGeometryInstanceBase::set_mesh_instance(RID p_mesh_instance) {
+ mesh_instance = p_mesh_instance;
+
+ _mark_dirty();
+}
+
+void RenderGeometryInstanceBase::set_transform(const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) {
+ transform = p_transform;
+ mirror = p_transform.basis.determinant() < 0;
+ data->aabb = p_aabb;
+ transformed_aabb = p_transformed_aabb;
+
+ Vector3 model_scale_vec = p_transform.basis.get_scale_abs();
+ // handle non uniform scale here
+
+ float max_scale = MAX(model_scale_vec.x, MAX(model_scale_vec.y, model_scale_vec.z));
+ float min_scale = MIN(model_scale_vec.x, MIN(model_scale_vec.y, model_scale_vec.z));
+ non_uniform_scale = max_scale >= 0.0 && (min_scale / max_scale) < 0.9;
+
+ lod_model_scale = max_scale;
+}
+
+void RenderGeometryInstanceBase::set_lod_bias(float p_lod_bias) {
+ lod_bias = p_lod_bias;
+}
+
+void RenderGeometryInstanceBase::set_layer_mask(uint32_t p_layer_mask) {
+ layer_mask = p_layer_mask;
+}
+
+void RenderGeometryInstanceBase::set_fade_range(bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) {
+ fade_near = p_enable_near;
+ fade_near_begin = p_near_begin;
+ fade_near_end = p_near_end;
+ fade_far = p_enable_far;
+ fade_far_begin = p_far_begin;
+ fade_far_end = p_far_end;
+}
+
+void RenderGeometryInstanceBase::set_parent_fade_alpha(float p_alpha) {
+ parent_fade_alpha = p_alpha;
+}
+
+void RenderGeometryInstanceBase::set_transparency(float p_transparency) {
+ force_alpha = CLAMP(1.0 - p_transparency, 0, 1);
+}
+
+void RenderGeometryInstanceBase::set_use_baked_light(bool p_enable) {
+ data->use_baked_light = p_enable;
+
+ _mark_dirty();
+}
+
+void RenderGeometryInstanceBase::set_use_dynamic_gi(bool p_enable) {
+ data->use_dynamic_gi = p_enable;
+
+ _mark_dirty();
+}
+
+void RenderGeometryInstanceBase::set_instance_shader_parameters_offset(int32_t p_offset) {
+ shader_parameters_offset = p_offset;
+
+ _mark_dirty();
+}
+
+void RenderGeometryInstanceBase::set_cast_double_sided_shadows(bool p_enable) {
+ data->cast_double_sided_shadows = p_enable;
+
+ _mark_dirty();
+}
+
+Transform3D RenderGeometryInstanceBase::get_transform() {
+ return transform;
+}
+
+AABB RenderGeometryInstanceBase::get_aabb() {
+ return data->aabb;
+}
diff --git a/servers/rendering/renderer_geometry_instance.h b/servers/rendering/renderer_geometry_instance.h
new file mode 100644
index 0000000000..279566d5c9
--- /dev/null
+++ b/servers/rendering/renderer_geometry_instance.h
@@ -0,0 +1,150 @@
+/*************************************************************************/
+/* renderer_geometry_instance.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef RENDERER_GEOMETRY_INSTANCE_H
+#define RENDERER_GEOMETRY_INSTANCE_H
+
+#include "core/math/rect2.h"
+#include "core/math/transform_3d.h"
+#include "core/math/vector3.h"
+#include "core/templates/rid.h"
+#include "storage/utilities.h"
+
+// API definition for our RenderGeometryInstance class so we can expose this through GDExternal in the near future
+class RenderGeometryInstance {
+public:
+ virtual ~RenderGeometryInstance() {}
+
+ virtual void _mark_dirty() = 0;
+
+ virtual void set_skeleton(RID p_skeleton) = 0;
+ virtual void set_material_override(RID p_override) = 0;
+ virtual void set_material_overlay(RID p_overlay) = 0;
+ virtual void set_surface_materials(const Vector<RID> &p_materials) = 0;
+ virtual void set_mesh_instance(RID p_mesh_instance) = 0;
+ virtual void set_transform(const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) = 0;
+ virtual void set_lod_bias(float p_lod_bias) = 0;
+ virtual void set_layer_mask(uint32_t p_layer_mask) = 0;
+ virtual void set_fade_range(bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) = 0;
+ virtual void set_parent_fade_alpha(float p_alpha) = 0;
+ virtual void set_transparency(float p_transparency) = 0;
+ virtual void set_use_baked_light(bool p_enable) = 0;
+ virtual void set_use_dynamic_gi(bool p_enable) = 0;
+ virtual void set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) = 0;
+ virtual void set_lightmap_capture(const Color *p_sh9) = 0;
+ virtual void set_instance_shader_parameters_offset(int32_t p_offset) = 0;
+ virtual void set_cast_double_sided_shadows(bool p_enable) = 0;
+
+ virtual Transform3D get_transform() = 0;
+ virtual AABB get_aabb() = 0;
+
+ virtual void pair_light_instances(const RID *p_light_instances, uint32_t p_light_instance_count) = 0;
+ virtual void pair_reflection_probe_instances(const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) = 0;
+ virtual void pair_decal_instances(const RID *p_decal_instances, uint32_t p_decal_instance_count) = 0;
+ virtual void pair_voxel_gi_instances(const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) = 0;
+
+ virtual void set_softshadow_projector_pairing(bool p_softshadow, bool p_projector) = 0;
+};
+
+// Base implementation of RenderGeometryInstance shared by internal renderers.
+class RenderGeometryInstanceBase : public RenderGeometryInstance {
+public:
+ // setup
+ uint32_t base_flags = 0;
+ uint32_t flags_cache = 0;
+
+ // used during rendering
+ float depth = 0;
+
+ RID mesh_instance;
+
+ Transform3D transform;
+ bool mirror = false; // move into data?
+ AABB transformed_aabb; //needed for LOD
+ bool non_uniform_scale = false;
+ float lod_model_scale = 1.0;
+ float lod_bias = 0.0;
+
+ uint32_t layer_mask = 1;
+
+ bool fade_near = false;
+ float fade_near_begin = 0;
+ float fade_near_end = 0;
+ bool fade_far = false;
+ float fade_far_begin = 0;
+ float fade_far_end = 0;
+
+ float parent_fade_alpha = 1.0;
+ float force_alpha = 1.0;
+
+ int32_t shader_parameters_offset = -1;
+
+ struct Data {
+ //data used less often goes into regular heap
+ RID base;
+ RS::InstanceType base_type;
+
+ RID skeleton;
+ Vector<RID> surface_materials;
+ RID material_override;
+ RID material_overlay;
+ AABB aabb;
+
+ bool use_baked_light = false;
+ bool use_dynamic_gi = false;
+ bool cast_double_sided_shadows = false;
+ bool dirty_dependencies = false;
+
+ DependencyTracker dependency_tracker;
+ };
+
+ Data *data = nullptr;
+
+ virtual void set_skeleton(RID p_skeleton) override;
+ virtual void set_material_override(RID p_override) override;
+ virtual void set_material_overlay(RID p_overlay) override;
+ virtual void set_surface_materials(const Vector<RID> &p_materials) override;
+ virtual void set_mesh_instance(RID p_mesh_instance) override;
+ virtual void set_transform(const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) override;
+ virtual void set_lod_bias(float p_lod_bias) override;
+ virtual void set_layer_mask(uint32_t p_layer_mask) override;
+ virtual void set_fade_range(bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) override;
+ virtual void set_parent_fade_alpha(float p_alpha) override;
+ virtual void set_transparency(float p_transparency) override;
+ virtual void set_use_baked_light(bool p_enable) override;
+ virtual void set_use_dynamic_gi(bool p_enable) override;
+ virtual void set_instance_shader_parameters_offset(int32_t p_offset) override;
+ virtual void set_cast_double_sided_shadows(bool p_enable) override;
+
+ virtual Transform3D get_transform() override;
+ virtual AABB get_aabb() override;
+};
+
+#endif // RENDERER_GEOMETRY_INSTANCE_H
diff --git a/servers/rendering/renderer_rd/environment/fog.cpp b/servers/rendering/renderer_rd/environment/fog.cpp
index 63c227e89b..987c1dbb52 100644
--- a/servers/rendering/renderer_rd/environment/fog.cpp
+++ b/servers/rendering/renderer_rd/environment/fog.cpp
@@ -393,7 +393,22 @@ void Fog::FogShaderData::get_param_list(List<PropertyInfo> *p_param_list) const
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
diff --git a/servers/rendering/renderer_rd/environment/gi.cpp b/servers/rendering/renderer_rd/environment/gi.cpp
index cb3de07c31..cb120a1b49 100644
--- a/servers/rendering/renderer_rd/environment/gi.cpp
+++ b/servers/rendering/renderer_rd/environment/gi.cpp
@@ -1947,7 +1947,7 @@ void GI::SDFGI::pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_r
}
}
-void GI::SDFGI::render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render) {
+void GI::SDFGI::render_region(RID p_render_buffers, int p_region, const PagedArray<RenderGeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render) {
//print_line("rendering region " + itos(p_region));
RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(!rb); // we wouldn't be here if this failed but...
@@ -2428,7 +2428,7 @@ void GI::SDFGI::render_static_lights(RID p_render_buffers, uint32_t p_cascade_co
////////////////////////////////////////////////////////////////////////////////
// VoxelGIInstance
-void GI::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
+void GI::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
uint32_t data_version = gi->voxel_gi_get_data_version(probe);
@@ -2951,10 +2951,10 @@ void GI::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID
//this could probably be better parallelized in compute..
for (int i = 0; i < (int)p_dynamic_objects.size(); i++) {
- RendererSceneRender::GeometryInstance *instance = p_dynamic_objects[i];
+ RenderGeometryInstance *instance = p_dynamic_objects[i];
//transform aabb to voxel_gi
- AABB aabb = (to_probe_xform * p_scene_render->geometry_instance_get_transform(instance)).xform(p_scene_render->geometry_instance_get_aabb(instance));
+ AABB aabb = (to_probe_xform * instance->get_transform()).xform(instance->get_aabb());
//this needs to wrap to grid resolution to avoid jitter
//also extend margin a bit just in case
@@ -3960,7 +3960,7 @@ bool GI::voxel_gi_needs_update(RID p_probe) const {
return voxel_gi->last_probe_version != voxel_gi_get_version(voxel_gi->probe);
}
-void GI::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
+void GI::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
VoxelGIInstance *voxel_gi = get_probe_instance(p_probe);
ERR_FAIL_COND(!voxel_gi);
diff --git a/servers/rendering/renderer_rd/environment/gi.h b/servers/rendering/renderer_rd/environment/gi.h
index f4e32a8dd0..30e695120e 100644
--- a/servers/rendering/renderer_rd/environment/gi.h
+++ b/servers/rendering/renderer_rd/environment/gi.h
@@ -471,7 +471,7 @@ public:
Transform3D transform;
- void update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render);
+ void update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render);
void debug(RD::DrawListID p_draw_list, RID p_framebuffer, const Projection &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha);
};
@@ -627,7 +627,7 @@ public:
void debug_probes(RID p_framebuffer, const uint32_t p_view_count, const Projection *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth);
void pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render);
- void render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render);
+ void render_region(RID p_render_buffers, int p_region, const PagedArray<RenderGeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render);
void render_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const PagedArray<RID> *p_positional_light_cull_result, RendererSceneRenderRD *p_scene_render);
};
@@ -780,7 +780,7 @@ public:
RID voxel_gi_instance_create(RID p_base);
void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform);
bool voxel_gi_needs_update(RID p_probe) const;
- void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render);
+ void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render);
void debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const Projection &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha);
};
diff --git a/servers/rendering/renderer_rd/environment/sky.cpp b/servers/rendering/renderer_rd/environment/sky.cpp
index 0851e754ea..2b140696b4 100644
--- a/servers/rendering/renderer_rd/environment/sky.cpp
+++ b/servers/rendering/renderer_rd/environment/sky.cpp
@@ -178,8 +178,22 @@ void SkyRD::SkyShaderData::get_param_list(List<PropertyInfo> *p_param_list) cons
order[E.value.order] = E.key;
}
}
-
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
@@ -405,21 +419,22 @@ void SkyRD::ReflectionData::update_reflection_data(int p_size, int p_mipmaps, bo
radiance_base_cubemap = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), p_base_cube, p_base_layer, 0, 1, RD::TEXTURE_SLICE_CUBEMAP);
RD::get_singleton()->set_resource_name(radiance_base_cubemap, "radiance base cubemap");
+
RD::TextureFormat tf;
tf.format = p_texture_format;
- tf.width = 64; // Always 64x64
- tf.height = 64;
+ tf.width = p_low_quality ? 64 : p_size >> 1; // Always 64x64 when using REALTIME.
+ tf.height = p_low_quality ? 64 : p_size >> 1;
tf.texture_type = RD::TEXTURE_TYPE_CUBE;
tf.array_layers = 6;
- tf.mipmaps = 7;
+ tf.mipmaps = p_low_quality ? 7 : mipmaps - 1;
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
downsampled_radiance_cubemap = RD::get_singleton()->texture_create(tf, RD::TextureView());
RD::get_singleton()->set_resource_name(downsampled_radiance_cubemap, "downsampled radiance cubemap");
{
- uint32_t mmw = 64;
- uint32_t mmh = 64;
- downsampled_layer.mipmaps.resize(7);
+ uint32_t mmw = tf.width;
+ uint32_t mmh = tf.height;
+ downsampled_layer.mipmaps.resize(tf.mipmaps);
for (int j = 0; j < downsampled_layer.mipmaps.size(); j++) {
ReflectionData::DownsampleLayer::Mipmap &mm = downsampled_layer.mipmaps.write[j];
mm.size.width = mmw;
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
index 4a55a04cd4..872a27fda1 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -1873,7 +1873,7 @@ void RenderForwardClustered::_render_shadow_begin() {
scene_state.instance_data[RENDER_LIST_SECONDARY].clear();
}
-void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const PagedArray<GeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane, float p_lod_distance_multiplier, float p_screen_mesh_lod_threshold, const Rect2i &p_rect, bool p_flip_y, bool p_clear_region, bool p_begin, bool p_end, RendererScene::RenderInfo *p_render_info) {
+void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const PagedArray<RenderGeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane, float p_lod_distance_multiplier, float p_screen_mesh_lod_threshold, const Rect2i &p_rect, bool p_flip_y, bool p_clear_region, bool p_begin, bool p_end, RendererScene::RenderInfo *p_render_info) {
uint32_t shadow_pass_index = scene_state.shadow_passes.size();
SceneState::ShadowPass shadow_pass;
@@ -1963,7 +1963,7 @@ void RenderForwardClustered::_render_shadow_end(uint32_t p_barrier) {
RD::get_singleton()->draw_command_end_label();
}
-void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) {
+void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<RenderGeometryInstance *> &p_instances) {
RENDER_TIMESTAMP("Setup GPUParticlesCollisionHeightField3D");
RD::get_singleton()->draw_command_begin_label("Render Collider Heightfield");
@@ -2002,7 +2002,7 @@ void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, con
RD::get_singleton()->draw_command_end_label();
}
-void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
+void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
RENDER_TIMESTAMP("Setup Rendering 3D Material");
RD::get_singleton()->draw_command_begin_label("Render 3D Material");
@@ -2051,7 +2051,7 @@ void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform
RD::get_singleton()->draw_command_end_label();
}
-void RenderForwardClustered::_render_uv2(const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
+void RenderForwardClustered::_render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
RENDER_TIMESTAMP("Setup Rendering UV2");
RD::get_singleton()->draw_command_begin_label("Render UV2");
@@ -2121,7 +2121,7 @@ void RenderForwardClustered::_render_uv2(const PagedArray<GeometryInstance *> &p
RD::get_singleton()->draw_command_end_label();
}
-void RenderForwardClustered::_render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) {
+void RenderForwardClustered::_render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<RenderGeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) {
RENDER_TIMESTAMP("Render SDFGI");
RD::get_singleton()->draw_command_begin_label("Render SDFGI Voxel");
@@ -2792,24 +2792,23 @@ RID RenderForwardClustered::_render_buffers_get_velocity_texture(RID p_render_bu
RenderForwardClustered *RenderForwardClustered::singleton = nullptr;
-void RenderForwardClustered::_geometry_instance_mark_dirty(GeometryInstance *p_geometry_instance) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- if (ginstance->dirty_list_element.in_list()) {
+void RenderForwardClustered::GeometryInstanceForwardClustered::_mark_dirty() {
+ if (dirty_list_element.in_list()) {
return;
}
//clear surface caches
- GeometryInstanceSurfaceDataCache *surf = ginstance->surface_caches;
+ GeometryInstanceSurfaceDataCache *surf = surface_caches;
while (surf) {
GeometryInstanceSurfaceDataCache *next = surf->next;
- geometry_instance_surface_alloc.free(surf);
+ RenderForwardClustered::get_singleton()->geometry_instance_surface_alloc.free(surf);
surf = next;
}
- ginstance->surface_caches = nullptr;
+ surface_caches = nullptr;
- geometry_instance_dirty_list.add(&ginstance->dirty_list_element);
+ RenderForwardClustered::get_singleton()->geometry_instance_dirty_list.add(&dirty_list_element);
}
void RenderForwardClustered::_geometry_instance_add_surface_with_material(GeometryInstanceForwardClustered *ginstance, uint32_t p_surface, SceneShaderForwardClustered::MaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh) {
@@ -2977,7 +2976,7 @@ void RenderForwardClustered::_geometry_instance_add_surface(GeometryInstanceForw
}
}
-void RenderForwardClustered::_geometry_instance_update(GeometryInstance *p_geometry_instance) {
+void RenderForwardClustered::_geometry_instance_update(RenderGeometryInstance *p_geometry_instance) {
RendererRD::MeshStorage *mesh_storage = RendererRD::MeshStorage::get_singleton();
RendererRD::ParticlesStorage *particles_storage = RendererRD::ParticlesStorage::get_singleton();
GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
@@ -3136,7 +3135,7 @@ void RenderForwardClustered::_geometry_instance_dependency_changed(Dependency::D
case Dependency::DEPENDENCY_CHANGED_PARTICLES:
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
- static_cast<RenderForwardClustered *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata));
+ static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
} break;
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_tracker->userdata);
@@ -3150,10 +3149,10 @@ void RenderForwardClustered::_geometry_instance_dependency_changed(Dependency::D
}
}
void RenderForwardClustered::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
- static_cast<RenderForwardClustered *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata));
+ static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
}
-RendererSceneRender::GeometryInstance *RenderForwardClustered::geometry_instance_create(RID p_base) {
+RenderGeometryInstance *RenderForwardClustered::geometry_instance_create(RID p_base) {
RS::InstanceType type = RSG::utilities->get_base_type(p_base);
ERR_FAIL_COND_V(!((1 << type) & RS::INSTANCE_GEOMETRY_MASK), nullptr);
@@ -3166,155 +3165,47 @@ RendererSceneRender::GeometryInstance *RenderForwardClustered::geometry_instance
ginstance->data->dependency_tracker.changed_callback = _geometry_instance_dependency_changed;
ginstance->data->dependency_tracker.deleted_callback = _geometry_instance_dependency_deleted;
- _geometry_instance_mark_dirty(ginstance);
+ ginstance->_mark_dirty();
return ginstance;
}
-void RenderForwardClustered::geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->skeleton = p_skeleton;
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-void RenderForwardClustered::geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->material_override = p_override;
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-void RenderForwardClustered::geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_overlay) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->material_overlay = p_overlay;
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-void RenderForwardClustered::geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_materials) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->surface_materials = p_materials;
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-void RenderForwardClustered::geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->mesh_instance = p_mesh_instance;
- _geometry_instance_mark_dirty(ginstance);
-}
-void RenderForwardClustered::geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
+void RenderForwardClustered::GeometryInstanceForwardClustered::set_transform(const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabbb) {
uint64_t frame = RSG::rasterizer->get_frame_number();
- if (frame != ginstance->prev_transform_change_frame) {
- ginstance->prev_transform = ginstance->transform;
- ginstance->prev_transform_change_frame = frame;
- ginstance->prev_transform_dirty = true;
+ if (frame != prev_transform_change_frame) {
+ prev_transform = transform;
+ prev_transform_change_frame = frame;
+ prev_transform_dirty = true;
}
- ginstance->transform = p_transform;
- ginstance->mirror = p_transform.basis.determinant() < 0;
- ginstance->data->aabb = p_aabb;
- ginstance->transformed_aabb = p_transformed_aabb;
-
- Vector3 model_scale_vec = p_transform.basis.get_scale_abs();
- // handle non uniform scale here
-
- float max_scale = MAX(model_scale_vec.x, MAX(model_scale_vec.y, model_scale_vec.z));
- float min_scale = MIN(model_scale_vec.x, MIN(model_scale_vec.y, model_scale_vec.z));
- ginstance->non_uniform_scale = max_scale >= 0.0 && (min_scale / max_scale) < 0.9;
-
- ginstance->lod_model_scale = max_scale;
-}
-void RenderForwardClustered::geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->lod_bias = p_lod_bias;
-}
-void RenderForwardClustered::geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->fade_near = p_enable_near;
- ginstance->fade_near_begin = p_near_begin;
- ginstance->fade_near_end = p_near_end;
- ginstance->fade_far = p_enable_far;
- ginstance->fade_far_begin = p_far_begin;
- ginstance->fade_far_end = p_far_end;
+ RenderGeometryInstanceBase::set_transform(p_transform, p_aabb, p_transformed_aabbb);
}
-void RenderForwardClustered::geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->parent_fade_alpha = p_alpha;
-}
+void RenderForwardClustered::GeometryInstanceForwardClustered::set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) {
+ lightmap_instance = p_lightmap_instance;
+ lightmap_uv_scale = p_lightmap_uv_scale;
+ lightmap_slice_index = p_lightmap_slice_index;
-void RenderForwardClustered::geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->force_alpha = CLAMP(1.0 - p_transparency, 0, 1);
+ _mark_dirty();
}
-void RenderForwardClustered::geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->use_baked_light = p_enable;
- _geometry_instance_mark_dirty(ginstance);
-}
-void RenderForwardClustered::geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->use_dynamic_gi = p_enable;
- _geometry_instance_mark_dirty(ginstance);
-}
-void RenderForwardClustered::geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->lightmap_instance = p_lightmap_instance;
- ginstance->lightmap_uv_scale = p_lightmap_uv_scale;
- ginstance->lightmap_slice_index = p_lightmap_slice_index;
- _geometry_instance_mark_dirty(ginstance);
-}
-void RenderForwardClustered::geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
+void RenderForwardClustered::GeometryInstanceForwardClustered::set_lightmap_capture(const Color *p_sh9) {
if (p_sh9) {
- if (ginstance->lightmap_sh == nullptr) {
- ginstance->lightmap_sh = geometry_instance_lightmap_sh.alloc();
+ if (lightmap_sh == nullptr) {
+ lightmap_sh = RenderForwardClustered::get_singleton()->geometry_instance_lightmap_sh.alloc();
}
- memcpy(ginstance->lightmap_sh->sh, p_sh9, sizeof(Color) * 9);
+ memcpy(lightmap_sh->sh, p_sh9, sizeof(Color) * 9);
} else {
- if (ginstance->lightmap_sh != nullptr) {
- geometry_instance_lightmap_sh.free(ginstance->lightmap_sh);
- ginstance->lightmap_sh = nullptr;
+ if (lightmap_sh != nullptr) {
+ RenderForwardClustered::get_singleton()->geometry_instance_lightmap_sh.free(lightmap_sh);
+ lightmap_sh = nullptr;
}
}
- _geometry_instance_mark_dirty(ginstance);
-}
-void RenderForwardClustered::geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->shader_parameters_offset = p_offset;
- _geometry_instance_mark_dirty(ginstance);
+ _mark_dirty();
}
-void RenderForwardClustered::geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->cast_double_sided_shadows = p_enable;
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RenderForwardClustered::geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->layer_mask = p_layer_mask;
-}
-
-void RenderForwardClustered::geometry_instance_free(GeometryInstance *p_geometry_instance) {
+void RenderForwardClustered::geometry_instance_free(RenderGeometryInstance *p_geometry_instance) {
GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
ERR_FAIL_COND(!ginstance);
if (ginstance->lightmap_sh != nullptr) {
@@ -3333,47 +3224,25 @@ void RenderForwardClustered::geometry_instance_free(GeometryInstance *p_geometry
uint32_t RenderForwardClustered::geometry_instance_get_pair_mask() {
return (1 << RS::INSTANCE_VOXEL_GI);
}
-void RenderForwardClustered::geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) {
-}
-void RenderForwardClustered::geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) {
-}
-void RenderForwardClustered::geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) {
-}
-Transform3D RenderForwardClustered::geometry_instance_get_transform(GeometryInstance *p_instance) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_instance);
- ERR_FAIL_COND_V(!ginstance, Transform3D());
- return ginstance->transform;
-}
-
-AABB RenderForwardClustered::geometry_instance_get_aabb(GeometryInstance *p_instance) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_instance);
- ERR_FAIL_COND_V(!ginstance, AABB());
- return ginstance->data->aabb;
-}
-
-void RenderForwardClustered::geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
+void RenderForwardClustered::GeometryInstanceForwardClustered::pair_voxel_gi_instances(const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) {
if (p_voxel_gi_instance_count > 0) {
- ginstance->voxel_gi_instances[0] = p_voxel_gi_instances[0];
+ voxel_gi_instances[0] = p_voxel_gi_instances[0];
} else {
- ginstance->voxel_gi_instances[0] = RID();
+ voxel_gi_instances[0] = RID();
}
if (p_voxel_gi_instance_count > 1) {
- ginstance->voxel_gi_instances[1] = p_voxel_gi_instances[1];
+ voxel_gi_instances[1] = p_voxel_gi_instances[1];
} else {
- ginstance->voxel_gi_instances[1] = RID();
+ voxel_gi_instances[1] = RID();
}
}
-void RenderForwardClustered::geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) {
- GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->using_projectors = p_projector;
- ginstance->using_softshadows = p_softshadow;
- _geometry_instance_mark_dirty(ginstance);
+void RenderForwardClustered::GeometryInstanceForwardClustered::set_softshadow_projector_pairing(bool p_softshadow, bool p_projector) {
+ using_projectors = p_projector;
+ using_softshadows = p_softshadow;
+ _mark_dirty();
}
void RenderForwardClustered::_update_shader_quality_settings() {
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
index 2bdf48c72f..7e71406af8 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
@@ -427,7 +427,7 @@ class RenderForwardClustered : public RendererSceneRenderRD {
HashMap<Size2i, RID> sdfgi_framebuffer_size_cache;
struct GeometryInstanceData;
- struct GeometryInstanceForwardClustered;
+ class GeometryInstanceForwardClustered;
struct GeometryInstanceLightmapSH {
Color sh[9];
@@ -487,73 +487,48 @@ class RenderForwardClustered : public RendererSceneRenderRD {
GeometryInstanceForwardClustered *owner = nullptr;
};
- struct GeometryInstanceForwardClustered : public GeometryInstance {
+ class GeometryInstanceForwardClustered : public RenderGeometryInstanceBase {
+ public:
+ // lightmap
+ RID lightmap_instance;
+ Rect2 lightmap_uv_scale;
+ uint32_t lightmap_slice_index;
+ GeometryInstanceLightmapSH *lightmap_sh = nullptr;
+
//used during rendering
- bool mirror = false;
- bool non_uniform_scale = false;
- float lod_bias = 0.0;
- float lod_model_scale = 1.0;
- AABB transformed_aabb; //needed for LOD
- float depth = 0;
+
uint32_t gi_offset_cache = 0;
- uint32_t flags_cache = 0;
bool store_transform_cache = true;
- int32_t shader_parameters_offset = -1;
- uint32_t lightmap_slice_index;
- Rect2 lightmap_uv_scale;
- uint32_t layer_mask = 1;
RID transforms_uniform_set;
uint32_t instance_count = 0;
uint32_t trail_steps = 1;
- RID mesh_instance;
bool can_sdfgi = false;
bool using_projectors = false;
bool using_softshadows = false;
- bool fade_near = false;
- float fade_near_begin = 0;
- float fade_near_end = 0;
- bool fade_far = false;
- float fade_far_begin = 0;
- float fade_far_end = 0;
- float force_alpha = 1.0;
- float parent_fade_alpha = 1.0;
//used during setup
- uint32_t base_flags = 0;
uint64_t prev_transform_change_frame = 0xFFFFFFFF;
bool prev_transform_dirty = true;
- Transform3D transform;
Transform3D prev_transform;
RID voxel_gi_instances[MAX_VOXEL_GI_INSTANCESS_PER_INSTANCE];
- RID lightmap_instance;
- GeometryInstanceLightmapSH *lightmap_sh = nullptr;
GeometryInstanceSurfaceDataCache *surface_caches = nullptr;
SelfList<GeometryInstanceForwardClustered> dirty_list_element;
- struct Data {
- //data used less often goes into regular heap
- RID base;
- RS::InstanceType base_type;
-
- RID skeleton;
- Vector<RID> surface_materials;
- RID material_override;
- RID material_overlay;
- AABB aabb;
+ GeometryInstanceForwardClustered() :
+ dirty_list_element(this) {}
- bool use_dynamic_gi = false;
- bool use_baked_light = true;
- bool cast_double_sided_shadows = false;
- bool mirror = false;
- bool dirty_dependencies = false;
+ virtual void _mark_dirty() override;
- DependencyTracker dependency_tracker;
- };
+ virtual void set_transform(const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabbb) override;
+ virtual void set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override;
+ virtual void set_lightmap_capture(const Color *p_sh9) override;
- Data *data = nullptr;
+ virtual void pair_light_instances(const RID *p_light_instances, uint32_t p_light_instance_count) override {}
+ virtual void pair_reflection_probe_instances(const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override {}
+ virtual void pair_decal_instances(const RID *p_decal_instances, uint32_t p_decal_instance_count) override {}
+ virtual void pair_voxel_gi_instances(const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override;
- GeometryInstanceForwardClustered() :
- dirty_list_element(this) {}
+ virtual void set_softshadow_projector_pairing(bool p_softshadow, bool p_projector) override;
};
static void _geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker);
@@ -568,8 +543,7 @@ class RenderForwardClustered : public RendererSceneRenderRD {
void _geometry_instance_add_surface_with_material(GeometryInstanceForwardClustered *ginstance, uint32_t p_surface, SceneShaderForwardClustered::MaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh);
void _geometry_instance_add_surface_with_material_chain(GeometryInstanceForwardClustered *ginstance, uint32_t p_surface, SceneShaderForwardClustered::MaterialData *p_material, RID p_mat_src, RID p_mesh);
void _geometry_instance_add_surface(GeometryInstanceForwardClustered *ginstance, uint32_t p_surface, RID p_material, RID p_mesh);
- void _geometry_instance_mark_dirty(GeometryInstance *p_geometry_instance);
- void _geometry_instance_update(GeometryInstance *p_geometry_instance);
+ void _geometry_instance_update(RenderGeometryInstance *p_geometry_instance);
void _update_dirty_geometry_instances();
/* Render List */
@@ -640,52 +614,27 @@ protected:
virtual void _render_scene(RenderDataRD *p_render_data, const Color &p_default_bg_color) override;
virtual void _render_shadow_begin() override;
- virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<GeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_mesh_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true, RendererScene::RenderInfo *p_render_info = nullptr) override;
+ virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<RenderGeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_mesh_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true, RendererScene::RenderInfo *p_render_info = nullptr) override;
virtual void _render_shadow_process() override;
virtual void _render_shadow_end(uint32_t p_barrier = RD::BARRIER_MASK_ALL) override;
- virtual void _render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
- virtual void _render_uv2(const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
- virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) override;
- virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) override;
+ virtual void _render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
+ virtual void _render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
+ virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<RenderGeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) override;
+ virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<RenderGeometryInstance *> &p_instances) override;
public:
+ static RenderForwardClustered *get_singleton() { return singleton; }
+
_FORCE_INLINE_ virtual void update_uniform_sets() override {
base_uniform_set_updated = true;
_update_render_base_uniform_set();
}
- virtual GeometryInstance *geometry_instance_create(RID p_base) override;
- virtual void geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) override;
- virtual void geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) override;
- virtual void geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_override) override;
- virtual void geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_materials) override;
- virtual void geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) override;
- virtual void geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) override;
- virtual void geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) override;
- virtual void geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) override;
- virtual void geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) override;
- virtual void geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) override;
- virtual void geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) override;
- virtual void geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) override;
- virtual void geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) override;
- virtual void geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override;
- virtual void geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) override;
- virtual void geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) override;
- virtual void geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) override;
-
- virtual Transform3D geometry_instance_get_transform(GeometryInstance *p_instance) override;
- virtual AABB geometry_instance_get_aabb(GeometryInstance *p_instance) override;
-
- virtual void geometry_instance_free(GeometryInstance *p_geometry_instance) override;
+ virtual RenderGeometryInstance *geometry_instance_create(RID p_base) override;
+ virtual void geometry_instance_free(RenderGeometryInstance *p_geometry_instance) override;
virtual uint32_t geometry_instance_get_pair_mask() override;
- virtual void geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) override;
- virtual void geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override;
- virtual void geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) override;
- virtual void geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override;
-
- virtual void geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) override;
virtual bool free(RID p_rid) override;
diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
index a559241846..6f4a7f6a84 100644
--- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
@@ -407,7 +407,22 @@ void SceneShaderForwardClustered::ShaderData::get_param_list(List<PropertyInfo>
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
@@ -667,7 +682,7 @@ void SceneShaderForwardClustered::init(const String p_defines) {
actions.renames["NORMAL_ROUGHNESS_TEXTURE"] = "normal_roughness_buffer";
actions.renames["DEPTH"] = "gl_FragDepth";
actions.renames["OUTPUT_IS_SRGB"] = "true";
- actions.renames["FOG"] = "custom_fog";
+ actions.renames["FOG"] = "fog";
actions.renames["RADIANCE"] = "custom_radiance";
actions.renames["IRRADIANCE"] = "custom_irradiance";
actions.renames["BONE_INDICES"] = "bone_attrib";
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
index 0ca71080fc..67c7d12517 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
@@ -907,7 +907,7 @@ void RenderForwardMobile::_render_shadow_begin() {
render_list[RENDER_LIST_SECONDARY].clear();
}
-void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedArray<GeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane, float p_lod_distance_multiplier, float p_screen_mesh_lod_threshold, const Rect2i &p_rect, bool p_flip_y, bool p_clear_region, bool p_begin, bool p_end, RendererScene::RenderInfo *p_render_info) {
+void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedArray<RenderGeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane, float p_lod_distance_multiplier, float p_screen_mesh_lod_threshold, const Rect2i &p_rect, bool p_flip_y, bool p_clear_region, bool p_begin, bool p_end, RendererScene::RenderInfo *p_render_info) {
uint32_t shadow_pass_index = scene_state.shadow_passes.size();
SceneState::ShadowPass shadow_pass;
@@ -1001,7 +1001,7 @@ void RenderForwardMobile::_render_shadow_end(uint32_t p_barrier) {
/* */
-void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
+void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
RENDER_TIMESTAMP("Setup Rendering 3D Material");
RD::get_singleton()->draw_command_begin_label("Render 3D Material");
@@ -1047,7 +1047,7 @@ void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, c
RD::get_singleton()->draw_command_end_label();
}
-void RenderForwardMobile::_render_uv2(const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
+void RenderForwardMobile::_render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
RENDER_TIMESTAMP("Setup Rendering UV2");
RD::get_singleton()->draw_command_begin_label("Render UV2");
@@ -1114,11 +1114,11 @@ void RenderForwardMobile::_render_uv2(const PagedArray<GeometryInstance *> &p_in
RD::get_singleton()->draw_command_end_label();
}
-void RenderForwardMobile::_render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) {
+void RenderForwardMobile::_render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<RenderGeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) {
// we don't do GI in low end..
}
-void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) {
+void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<RenderGeometryInstance *> &p_instances) {
RENDER_TIMESTAMP("Setup GPUParticlesCollisionHeightField3D");
RD::get_singleton()->draw_command_begin_label("Render Collider Heightfield");
@@ -2056,7 +2056,7 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr
/* Geometry instance */
-RendererSceneRender::GeometryInstance *RenderForwardMobile::geometry_instance_create(RID p_base) {
+RenderGeometryInstance *RenderForwardMobile::geometry_instance_create(RID p_base) {
RS::InstanceType type = RSG::utilities->get_base_type(p_base);
ERR_FAIL_COND_V(!((1 << type) & RS::INSTANCE_GEOMETRY_MASK), nullptr);
@@ -2066,165 +2066,36 @@ RendererSceneRender::GeometryInstance *RenderForwardMobile::geometry_instance_cr
ginstance->data->base = p_base;
ginstance->data->base_type = type;
- _geometry_instance_mark_dirty(ginstance);
+ ginstance->_mark_dirty();
return ginstance;
}
-void RenderForwardMobile::geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->skeleton = p_skeleton;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RenderForwardMobile::geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->material_override = p_override;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RenderForwardMobile::geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_overlay) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->material_overlay = p_overlay;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RenderForwardMobile::geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_materials) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->surface_materials = p_materials;
-
- _geometry_instance_mark_dirty(ginstance);
- ginstance->data->dirty_dependencies = true;
-}
-
-void RenderForwardMobile::geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->mesh_instance = p_mesh_instance;
-
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RenderForwardMobile::geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->transform = p_transform;
- ginstance->mirror = p_transform.basis.determinant() < 0;
- ginstance->data->aabb = p_aabb;
- ginstance->transformed_aabb = p_transformed_aabb;
-
- Vector3 model_scale_vec = p_transform.basis.get_scale_abs();
- // handle non uniform scale here
-
- float max_scale = MAX(model_scale_vec.x, MAX(model_scale_vec.y, model_scale_vec.z));
- float min_scale = MIN(model_scale_vec.x, MIN(model_scale_vec.y, model_scale_vec.z));
- ginstance->non_uniform_scale = max_scale >= 0.0 && (min_scale / max_scale) < 0.9;
-
- ginstance->lod_model_scale = max_scale;
-}
-
-void RenderForwardMobile::geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->layer_mask = p_layer_mask;
-}
-
-void RenderForwardMobile::geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->lod_bias = p_lod_bias;
-}
-
-void RenderForwardMobile::geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) {
-}
-
-void RenderForwardMobile::geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) {
-}
+void RenderForwardMobile::GeometryInstanceForwardMobile::set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) {
+ lightmap_instance = p_lightmap_instance;
+ lightmap_uv_scale = p_lightmap_uv_scale;
+ lightmap_slice_index = p_lightmap_slice_index;
-void RenderForwardMobile::geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) {
+ _mark_dirty();
}
-void RenderForwardMobile::geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->data->use_baked_light = p_enable;
-
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RenderForwardMobile::geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) {
- // !BAS! do we support this in mobile?
- // GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- // ERR_FAIL_COND(!ginstance);
- // ginstance->data->use_dynamic_gi = p_enable;
- // _geometry_instance_mark_dirty(ginstance);
-}
-
-void RenderForwardMobile::geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->lightmap_instance = p_lightmap_instance;
- ginstance->lightmap_uv_scale = p_lightmap_uv_scale;
- ginstance->lightmap_slice_index = p_lightmap_slice_index;
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RenderForwardMobile::geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
+void RenderForwardMobile::GeometryInstanceForwardMobile::set_lightmap_capture(const Color *p_sh9) {
if (p_sh9) {
- if (ginstance->lightmap_sh == nullptr) {
- ginstance->lightmap_sh = geometry_instance_lightmap_sh.alloc();
+ if (lightmap_sh == nullptr) {
+ lightmap_sh = RenderForwardMobile::get_singleton()->geometry_instance_lightmap_sh.alloc();
}
- memcpy(ginstance->lightmap_sh->sh, p_sh9, sizeof(Color) * 9);
+ memcpy(lightmap_sh->sh, p_sh9, sizeof(Color) * 9);
} else {
- if (ginstance->lightmap_sh != nullptr) {
- geometry_instance_lightmap_sh.free(ginstance->lightmap_sh);
- ginstance->lightmap_sh = nullptr;
+ if (lightmap_sh != nullptr) {
+ RenderForwardMobile::get_singleton()->geometry_instance_lightmap_sh.free(lightmap_sh);
+ lightmap_sh = nullptr;
}
}
- _geometry_instance_mark_dirty(ginstance);
-}
-
-void RenderForwardMobile::geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
- ginstance->shader_parameters_offset = p_offset;
- _geometry_instance_mark_dirty(ginstance);
+ _mark_dirty();
}
-void RenderForwardMobile::geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-
- ginstance->data->cast_double_sided_shadows = p_enable;
- _geometry_instance_mark_dirty(ginstance);
-}
-
-Transform3D RenderForwardMobile::geometry_instance_get_transform(GeometryInstance *p_instance) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_instance);
- ERR_FAIL_COND_V(!ginstance, Transform3D());
- return ginstance->transform;
-}
-
-AABB RenderForwardMobile::geometry_instance_get_aabb(GeometryInstance *p_instance) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_instance);
- ERR_FAIL_COND_V(!ginstance, AABB());
- return ginstance->data->aabb;
-}
-
-void RenderForwardMobile::geometry_instance_free(GeometryInstance *p_geometry_instance) {
+void RenderForwardMobile::geometry_instance_free(RenderGeometryInstance *p_geometry_instance) {
GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
ERR_FAIL_COND(!ginstance);
if (ginstance->lightmap_sh != nullptr) {
@@ -2244,26 +2115,23 @@ uint32_t RenderForwardMobile::geometry_instance_get_pair_mask() {
return ((1 << RS::INSTANCE_LIGHT) + (1 << RS::INSTANCE_REFLECTION_PROBE) + (1 << RS::INSTANCE_DECAL));
}
-void RenderForwardMobile::geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-
- ginstance->omni_light_count = 0;
- ginstance->spot_light_count = 0;
+void RenderForwardMobile::GeometryInstanceForwardMobile::pair_light_instances(const RID *p_light_instances, uint32_t p_light_instance_count) {
+ omni_light_count = 0;
+ spot_light_count = 0;
for (uint32_t i = 0; i < p_light_instance_count; i++) {
- RS::LightType type = light_instance_get_type(p_light_instances[i]);
+ RS::LightType type = RenderForwardMobile::get_singleton()->light_instance_get_type(p_light_instances[i]);
switch (type) {
case RS::LIGHT_OMNI: {
- if (ginstance->omni_light_count < (uint32_t)MAX_RDL_CULL) {
- ginstance->omni_lights[ginstance->omni_light_count] = light_instance_get_forward_id(p_light_instances[i]);
- ginstance->omni_light_count++;
+ if (omni_light_count < (uint32_t)MAX_RDL_CULL) {
+ omni_lights[omni_light_count] = RenderForwardMobile::get_singleton()->light_instance_get_forward_id(p_light_instances[i]);
+ omni_light_count++;
}
} break;
case RS::LIGHT_SPOT: {
- if (ginstance->spot_light_count < (uint32_t)MAX_RDL_CULL) {
- ginstance->spot_lights[ginstance->spot_light_count] = light_instance_get_forward_id(p_light_instances[i]);
- ginstance->spot_light_count++;
+ if (spot_light_count < (uint32_t)MAX_RDL_CULL) {
+ spot_lights[spot_light_count] = RenderForwardMobile::get_singleton()->light_instance_get_forward_id(p_light_instances[i]);
+ spot_light_count++;
}
} break;
default:
@@ -2272,56 +2140,42 @@ void RenderForwardMobile::geometry_instance_pair_light_instances(GeometryInstanc
}
}
-void RenderForwardMobile::geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-
- ginstance->reflection_probe_count = p_reflection_probe_instance_count < (uint32_t)MAX_RDL_CULL ? p_reflection_probe_instance_count : (uint32_t)MAX_RDL_CULL;
- for (uint32_t i = 0; i < ginstance->reflection_probe_count; i++) {
- ginstance->reflection_probes[i] = reflection_probe_instance_get_forward_id(p_reflection_probe_instances[i]);
+void RenderForwardMobile::GeometryInstanceForwardMobile::pair_reflection_probe_instances(const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) {
+ reflection_probe_count = p_reflection_probe_instance_count < (uint32_t)MAX_RDL_CULL ? p_reflection_probe_instance_count : (uint32_t)MAX_RDL_CULL;
+ for (uint32_t i = 0; i < reflection_probe_count; i++) {
+ reflection_probes[i] = RenderForwardMobile::get_singleton()->reflection_probe_instance_get_forward_id(p_reflection_probe_instances[i]);
}
}
-void RenderForwardMobile::geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-
- ginstance->decals_count = p_decal_instance_count < (uint32_t)MAX_RDL_CULL ? p_decal_instance_count : (uint32_t)MAX_RDL_CULL;
- for (uint32_t i = 0; i < ginstance->decals_count; i++) {
- ginstance->decals[i] = decal_instance_get_forward_id(p_decal_instances[i]);
+void RenderForwardMobile::GeometryInstanceForwardMobile::pair_decal_instances(const RID *p_decal_instances, uint32_t p_decal_instance_count) {
+ decals_count = p_decal_instance_count < (uint32_t)MAX_RDL_CULL ? p_decal_instance_count : (uint32_t)MAX_RDL_CULL;
+ for (uint32_t i = 0; i < decals_count; i++) {
+ decals[i] = RenderForwardMobile::get_singleton()->decal_instance_get_forward_id(p_decal_instances[i]);
}
}
-void RenderForwardMobile::geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) {
- // We do not have this here!
-}
-
-void RenderForwardMobile::geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- ERR_FAIL_COND(!ginstance);
-
- ginstance->use_projector = p_projector;
- ginstance->use_soft_shadow = p_softshadow;
+void RenderForwardMobile::GeometryInstanceForwardMobile::set_softshadow_projector_pairing(bool p_softshadow, bool p_projector) {
+ use_projector = p_projector;
+ use_soft_shadow = p_softshadow;
}
-void RenderForwardMobile::_geometry_instance_mark_dirty(GeometryInstance *p_geometry_instance) {
- GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
- if (ginstance->dirty_list_element.in_list()) {
+void RenderForwardMobile::GeometryInstanceForwardMobile::_mark_dirty() {
+ if (dirty_list_element.in_list()) {
return;
}
//clear surface caches
- GeometryInstanceSurfaceDataCache *surf = ginstance->surface_caches;
+ GeometryInstanceSurfaceDataCache *surf = surface_caches;
while (surf) {
GeometryInstanceSurfaceDataCache *next = surf->next;
- geometry_instance_surface_alloc.free(surf);
+ RenderForwardMobile::get_singleton()->geometry_instance_surface_alloc.free(surf);
surf = next;
}
- ginstance->surface_caches = nullptr;
+ surface_caches = nullptr;
- geometry_instance_dirty_list.add(&ginstance->dirty_list_element);
+ RenderForwardMobile::get_singleton()->geometry_instance_dirty_list.add(&dirty_list_element);
}
void RenderForwardMobile::_geometry_instance_add_surface_with_material(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, SceneShaderForwardMobile::MaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh) {
@@ -2487,7 +2341,7 @@ void RenderForwardMobile::_geometry_instance_add_surface(GeometryInstanceForward
}
}
-void RenderForwardMobile::_geometry_instance_update(GeometryInstance *p_geometry_instance) {
+void RenderForwardMobile::_geometry_instance_update(RenderGeometryInstance *p_geometry_instance) {
RendererRD::MeshStorage *mesh_storage = RendererRD::MeshStorage::get_singleton();
RendererRD::ParticlesStorage *particles_storage = RendererRD::ParticlesStorage::get_singleton();
GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_geometry_instance);
@@ -2641,7 +2495,7 @@ void RenderForwardMobile::_geometry_instance_dependency_changed(Dependency::Depe
case Dependency::DEPENDENCY_CHANGED_PARTICLES:
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
- static_cast<RenderForwardMobile *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata));
+ static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
} break;
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_tracker->userdata);
@@ -2655,7 +2509,7 @@ void RenderForwardMobile::_geometry_instance_dependency_changed(Dependency::Depe
}
}
void RenderForwardMobile::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
- static_cast<RenderForwardMobile *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata));
+ static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
}
/* misc */
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
index 5b1109512a..4a7112eb81 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
@@ -160,7 +160,7 @@ protected:
// PASS_MODE_SDF,
};
- struct GeometryInstanceForwardMobile;
+ class GeometryInstanceForwardMobile;
struct GeometryInstanceSurfaceDataCache;
struct RenderElementInfo;
@@ -212,14 +212,14 @@ protected:
virtual void _render_scene(RenderDataRD *p_render_data, const Color &p_default_bg_color) override;
virtual void _render_shadow_begin() override;
- virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<GeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_mesh_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true, RendererScene::RenderInfo *p_render_info = nullptr) override;
+ virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<RenderGeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_mesh_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true, RendererScene::RenderInfo *p_render_info = nullptr) override;
virtual void _render_shadow_process() override;
virtual void _render_shadow_end(uint32_t p_barrier = RD::BARRIER_MASK_ALL) override;
- virtual void _render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
- virtual void _render_uv2(const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
- virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) override;
- virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) override;
+ virtual void _render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
+ virtual void _render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
+ virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<RenderGeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) override;
+ virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<RenderGeometryInstance *> &p_instances) override;
uint64_t lightmap_texture_array_version = 0xFFFFFFFF;
@@ -518,14 +518,8 @@ protected:
GeometryInstanceForwardMobile *owner = nullptr;
};
- // !BAS! GeometryInstanceForwardClustered and GeometryInstanceForwardMobile will likely have a lot of overlap
- // may need to think about making this its own class like GeometryInstanceRD?
-
- struct GeometryInstanceForwardMobile : public GeometryInstance {
- // setup
- uint32_t base_flags = 0;
- uint32_t flags_cache = 0;
-
+ class GeometryInstanceForwardMobile : public RenderGeometryInstanceBase {
+ public:
// this structure maps to our push constant in our shader and is populated right before our draw call
struct PushConstant {
float transform[16];
@@ -543,28 +537,18 @@ protected:
// PushConstant push_constant; // we populate this from our instance data
//used during rendering
- uint32_t layer_mask = 1;
RID transforms_uniform_set;
- float depth = 0;
- bool mirror = false;
bool use_projector = false;
bool use_soft_shadow = false;
- Transform3D transform;
bool store_transform_cache = true; // if true we copy our transform into our PushConstant, if false we use our transforms UBO and clear our PushConstants transform
- bool non_uniform_scale = false;
- AABB transformed_aabb; //needed for LOD
- float lod_bias = 0.0;
- float lod_model_scale = 1.0;
- int32_t shader_parameters_offset = -1;
uint32_t instance_count = 0;
uint32_t trail_steps = 1;
- RID mesh_instance;
// lightmap
uint32_t gi_offset_cache = 0; // !BAS! Should rename this to lightmap_offset_cache, in forward clustered this was shared between gi and lightmap
- uint32_t lightmap_slice_index;
- Rect2 lightmap_uv_scale;
RID lightmap_instance;
+ Rect2 lightmap_uv_scale;
+ uint32_t lightmap_slice_index;
GeometryInstanceLightmapSH *lightmap_sh = nullptr;
// culled light info
@@ -582,30 +566,20 @@ protected:
// do we use this?
SelfList<GeometryInstanceForwardMobile> dirty_list_element;
- struct Data {
- //data used less often goes into regular heap
- RID base;
- RS::InstanceType base_type;
-
- RID skeleton;
- Vector<RID> surface_materials;
- RID material_override;
- RID material_overlay;
- AABB aabb;
-
- bool use_baked_light = true;
- bool cast_double_sided_shadows = false;
- // bool mirror = false; // !BAS! Does not seem used, we already have this in the main struct
+ GeometryInstanceForwardMobile() :
+ dirty_list_element(this) {}
- bool dirty_dependencies = false;
+ virtual void _mark_dirty() override;
- DependencyTracker dependency_tracker;
- };
+ virtual void set_use_lightmap(RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override;
+ virtual void set_lightmap_capture(const Color *p_sh9) override;
- Data *data = nullptr;
+ virtual void pair_light_instances(const RID *p_light_instances, uint32_t p_light_instance_count) override;
+ virtual void pair_reflection_probe_instances(const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override;
+ virtual void pair_decal_instances(const RID *p_decal_instances, uint32_t p_decal_instance_count) override;
+ virtual void pair_voxel_gi_instances(const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override {}
- GeometryInstanceForwardMobile() :
- dirty_list_element(this) {}
+ virtual void set_softshadow_projector_pairing(bool p_softshadow, bool p_projector) override;
};
_FORCE_INLINE_ void _fill_push_constant_instance_indices(GeometryInstanceForwardMobile::PushConstant *p_push_constant, uint32_t &spec_constants, const GeometryInstanceForwardMobile *p_instance);
@@ -613,6 +587,8 @@ protected:
void _update_shader_quality_settings() override;
public:
+ static RenderForwardMobile *get_singleton() { return singleton; }
+
virtual RID reflection_probe_create_framebuffer(RID p_color, RID p_depth) override;
static void _geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker);
@@ -627,41 +603,13 @@ public:
void _geometry_instance_add_surface_with_material(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, SceneShaderForwardMobile::MaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh);
void _geometry_instance_add_surface_with_material_chain(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, SceneShaderForwardMobile::MaterialData *p_material, RID p_mat_src, RID p_mesh);
void _geometry_instance_add_surface(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, RID p_material, RID p_mesh);
- void _geometry_instance_mark_dirty(GeometryInstance *p_geometry_instance);
- void _geometry_instance_update(GeometryInstance *p_geometry_instance);
+ void _geometry_instance_update(RenderGeometryInstance *p_geometry_instance);
void _update_dirty_geometry_instances();
- virtual GeometryInstance *geometry_instance_create(RID p_base) override;
- virtual void geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) override;
- virtual void geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) override;
- virtual void geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_overlay) override;
- virtual void geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_materials) override;
- virtual void geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) override;
- virtual void geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabb) override;
- virtual void geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) override;
- virtual void geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) override;
- virtual void geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) override;
- virtual void geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) override;
- virtual void geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) override;
- virtual void geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) override;
- virtual void geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) override;
- virtual void geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) override;
- virtual void geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) override;
- virtual void geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) override;
- virtual void geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) override;
-
- virtual Transform3D geometry_instance_get_transform(GeometryInstance *p_instance) override;
- virtual AABB geometry_instance_get_aabb(GeometryInstance *p_instance) override;
-
- virtual void geometry_instance_free(GeometryInstance *p_geometry_instance) override;
+ virtual RenderGeometryInstance *geometry_instance_create(RID p_base) override;
+ virtual void geometry_instance_free(RenderGeometryInstance *p_geometry_instance) override;
virtual uint32_t geometry_instance_get_pair_mask() override;
- virtual void geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) override;
- virtual void geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) override;
- virtual void geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) override;
- virtual void geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) override;
-
- virtual void geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) override;
virtual bool free(RID p_rid) override;
diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
index afe4eac0b3..ba8ee62b3f 100644
--- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
@@ -364,7 +364,22 @@ void SceneShaderForwardMobile::ShaderData::get_param_list(List<PropertyInfo> *p_
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
@@ -569,7 +584,7 @@ void SceneShaderForwardMobile::init(const String p_defines) {
actions.renames["NORMAL_ROUGHNESS_TEXTURE"] = "normal_roughness_buffer";
actions.renames["DEPTH"] = "gl_FragDepth";
actions.renames["OUTPUT_IS_SRGB"] = "true";
- actions.renames["FOG"] = "custom_fog";
+ actions.renames["FOG"] = "fog";
actions.renames["RADIANCE"] = "custom_radiance";
actions.renames["IRRADIANCE"] = "custom_irradiance";
actions.renames["BONE_INDICES"] = "bone_attrib";
diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
index cf749854e2..a58cdd5066 100644
--- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
@@ -528,7 +528,7 @@ void RendererCanvasRenderRD::_render_item(RD::DrawListID p_draw_list, RID p_rend
}
if (rect->flags & CANVAS_RECT_TRANSPOSE) {
- dst_rect.size.x *= -1; // Encoding in the dst_rect.z uniform
+ push_constant.flags |= FLAGS_TRANSPOSE_RECT;
}
if (rect->flags & CANVAS_RECT_CLIP_UV) {
@@ -2185,7 +2185,22 @@ void RendererCanvasRenderRD::CanvasShaderData::get_param_list(List<PropertyInfo>
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
index 3161f03192..4e43acaf57 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
@@ -1525,7 +1525,7 @@ bool RendererSceneRenderRD::voxel_gi_needs_update(RID p_probe) const {
return gi.voxel_gi_needs_update(p_probe);
}
-void RendererSceneRenderRD::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<GeometryInstance *> &p_dynamic_objects) {
+void RendererSceneRenderRD::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects) {
if (!is_dynamic_gi_supported()) {
return;
}
@@ -3947,7 +3947,7 @@ void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool
}
}
-void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data, RendererScene::RenderInfo *r_render_info) {
+void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data, RendererScene::RenderInfo *r_render_info) {
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
// getting this here now so we can direct call a bunch of things more easily
@@ -4142,7 +4142,7 @@ void RendererSceneRenderRD::_debug_draw_cluster(RID p_render_buffers) {
}
}
-void RendererSceneRenderRD::_render_shadow_pass(RID p_light, RID p_shadow_atlas, int p_pass, const PagedArray<GeometryInstance *> &p_instances, const Plane &p_camera_plane, float p_lod_distance_multiplier, float p_screen_mesh_lod_threshold, bool p_open_pass, bool p_close_pass, bool p_clear_region, RendererScene::RenderInfo *p_render_info) {
+void RendererSceneRenderRD::_render_shadow_pass(RID p_light, RID p_shadow_atlas, int p_pass, const PagedArray<RenderGeometryInstance *> &p_instances, const Plane &p_camera_plane, float p_lod_distance_multiplier, float p_screen_mesh_lod_threshold, bool p_open_pass, bool p_close_pass, bool p_clear_region, RendererScene::RenderInfo *p_render_info) {
LightInstance *light_instance = light_instance_owner.get_or_null(p_light);
ERR_FAIL_COND(!light_instance);
@@ -4314,11 +4314,11 @@ void RendererSceneRenderRD::_render_shadow_pass(RID p_light, RID p_shadow_atlas,
}
}
-void RendererSceneRenderRD::render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
+void RendererSceneRenderRD::render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {
_render_material(p_cam_transform, p_cam_projection, p_cam_orthogonal, p_instances, p_framebuffer, p_region);
}
-void RendererSceneRenderRD::render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<GeometryInstance *> &p_instances) {
+void RendererSceneRenderRD::render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<RenderGeometryInstance *> &p_instances) {
RendererRD::ParticlesStorage *particles_storage = RendererRD::ParticlesStorage::get_singleton();
ERR_FAIL_COND(!particles_storage->particles_collision_is_heightfield(p_collider));
@@ -4497,7 +4497,7 @@ TypedArray<Image> RendererSceneRenderRD::bake_render_uv2(RID p_base, const Vecto
//RID sampled_light;
- GeometryInstance *gi = geometry_instance_create(p_base);
+ RenderGeometryInstance *gi = geometry_instance_create(p_base);
uint32_t sc = RSG::mesh_storage->mesh_get_surface_count(p_base);
Vector<RID> materials;
@@ -4509,7 +4509,7 @@ TypedArray<Image> RendererSceneRenderRD::bake_render_uv2(RID p_base, const Vecto
}
}
- geometry_instance_set_surface_materials(gi, materials);
+ gi->set_surface_materials(materials);
if (cull_argument.size() == 0) {
cull_argument.push_back(nullptr);
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
index cd56b8efb3..8b2c159660 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
@@ -69,7 +69,7 @@ struct RenderDataRD {
float z_near = 0.0;
float z_far = 0.0;
- const PagedArray<RendererSceneRender::GeometryInstance *> *instances = nullptr;
+ const PagedArray<RenderGeometryInstance *> *instances = nullptr;
const PagedArray<RID> *lights = nullptr;
const PagedArray<RID> *reflection_probes = nullptr;
const PagedArray<RID> *voxel_gi_instances = nullptr;
@@ -122,14 +122,14 @@ protected:
virtual void _render_scene(RenderDataRD *p_render_data, const Color &p_default_color) = 0;
virtual void _render_shadow_begin() = 0;
- virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<GeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_mesh_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true, RendererScene::RenderInfo *p_render_info = nullptr) = 0;
+ virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<RenderGeometryInstance *> &p_instances, const Projection &p_projection, const Transform3D &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_mesh_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true, RendererScene::RenderInfo *p_render_info = nullptr) = 0;
virtual void _render_shadow_process() = 0;
virtual void _render_shadow_end(uint32_t p_barrier = RD::BARRIER_MASK_ALL) = 0;
- virtual void _render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
- virtual void _render_uv2(const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
- virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) = 0;
- virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) = 0;
+ virtual void _render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
+ virtual void _render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
+ virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<RenderGeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) = 0;
+ virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const Projection &p_cam_projection, const PagedArray<RenderGeometryInstance *> &p_instances) = 0;
void _debug_sdfgi_probes(RID p_render_buffers, RID p_framebuffer, uint32_t p_view_count, const Projection *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth);
void _debug_draw_cluster(RID p_render_buffers);
@@ -161,8 +161,8 @@ protected:
void _disable_clear_request(const RenderDataRD *p_render_data);
// needed for a single argument calls (material and uv2)
- PagedArrayPool<GeometryInstance *> cull_argument_pool;
- PagedArray<GeometryInstance *> cull_argument; //need this to exist
+ PagedArrayPool<RenderGeometryInstance *> cull_argument_pool;
+ PagedArray<RenderGeometryInstance *> cull_argument; //need this to exist
RendererRD::SSEffects *ss_effects = nullptr;
RendererRD::GI gi;
@@ -750,7 +750,7 @@ private:
uint32_t max_cluster_elements = 512;
- void _render_shadow_pass(RID p_light, RID p_shadow_atlas, int p_pass, const PagedArray<GeometryInstance *> &p_instances, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0, float p_screen_mesh_lod_threshold = 0.0, bool p_open_pass = true, bool p_close_pass = true, bool p_clear_region = true, RendererScene::RenderInfo *p_render_info = nullptr);
+ void _render_shadow_pass(RID p_light, RID p_shadow_atlas, int p_pass, const PagedArray<RenderGeometryInstance *> &p_instances, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0, float p_screen_mesh_lod_threshold = 0.0, bool p_open_pass = true, bool p_close_pass = true, bool p_clear_region = true, RendererScene::RenderInfo *p_render_info = nullptr);
/* Volumetric Fog */
@@ -761,9 +761,6 @@ private:
void _update_volumetric_fog(RID p_render_buffers, RID p_environment, const Projection &p_cam_projection, const Transform3D &p_cam_transform, const Transform3D &p_prev_cam_inv_transform, RID p_shadow_atlas, int p_directional_light_count, bool p_use_directional_shadows, int p_positional_light_count, int p_voxel_gi_count, const PagedArray<RID> &p_fog_volumes);
public:
- virtual Transform3D geometry_instance_get_transform(GeometryInstance *p_instance) = 0;
- virtual AABB geometry_instance_get_aabb(GeometryInstance *p_instance) = 0;
-
/* GI */
RendererRD::GI *get_gi() { return &gi; }
@@ -1160,7 +1157,7 @@ public:
virtual RID voxel_gi_instance_create(RID p_base) override;
virtual void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) override;
virtual bool voxel_gi_needs_update(RID p_probe) const override;
- virtual void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects) override;
+ virtual void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects) override;
virtual void voxel_gi_set_quality(RS::VoxelGIQuality p_quality) override { gi.voxel_gi_quality = p_quality; }
/* render buffers */
@@ -1203,11 +1200,11 @@ public:
virtual void update_uniform_sets(){};
- virtual void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) override;
+ virtual void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) override;
- virtual void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
+ virtual void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) override;
- virtual void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<GeometryInstance *> &p_instances) override;
+ virtual void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<RenderGeometryInstance *> &p_instances) override;
virtual void set_scene_pass(uint64_t p_pass) override {
scene_pass = p_pass;
diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
index ea4bd6ab0b..75977c5bc9 100644
--- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
+++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
@@ -1612,7 +1612,22 @@ void ParticlesStorage::ParticlesShaderData::get_param_list(List<PropertyInfo> *p
}
}
+ String last_group;
for (const KeyValue<int, StringName> &E : order) {
+ String group = uniforms[E.value].group;
+ if (!uniforms[E.value].subgroup.is_empty()) {
+ group += "::" + uniforms[E.value].subgroup;
+ }
+
+ if (group != last_group) {
+ PropertyInfo pi;
+ pi.usage = PROPERTY_USAGE_GROUP;
+ pi.name = group;
+ p_param_list->push_back(pi);
+
+ last_group = group;
+ }
+
PropertyInfo pi = ShaderLanguage::uniform_to_property_info(uniforms[E.value]);
pi.name = E.value;
p_param_list->push_back(pi);
diff --git a/servers/rendering/renderer_rd/storage_rd/texture_storage.h b/servers/rendering/renderer_rd/storage_rd/texture_storage.h
index 1a5a3dd023..1eb4a283ca 100644
--- a/servers/rendering/renderer_rd/storage_rd/texture_storage.h
+++ b/servers/rendering/renderer_rd/storage_rd/texture_storage.h
@@ -191,8 +191,8 @@ struct Decal {
float upper_fade = 0.3;
float lower_fade = 0.3;
bool distance_fade = false;
- float distance_fade_begin = 10;
- float distance_fade_length = 1;
+ float distance_fade_begin = 40.0;
+ float distance_fade_length = 10.0;
float normal_fade = 0.0;
Dependency dependency;
diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp
index 7631be3669..7e9be504f8 100644
--- a/servers/rendering/renderer_scene_cull.cpp
+++ b/servers/rendering/renderer_scene_cull.cpp
@@ -475,7 +475,7 @@ void RendererSceneCull::_instance_update_mesh_instance(Instance *p_instance) {
}
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(p_instance->base_data);
- scene_render->geometry_instance_set_mesh_instance(geom->geometry_instance, p_instance->mesh_instance);
+ geom->geometry_instance->set_mesh_instance(p_instance->mesh_instance);
if (p_instance->scenario && p_instance->array_index >= 0) {
InstanceData &idata = p_instance->scenario->instance_data[p_instance->array_index];
@@ -637,20 +637,20 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) {
instance->base_data = geom;
geom->geometry_instance = scene_render->geometry_instance_create(p_base);
- scene_render->geometry_instance_set_skeleton(geom->geometry_instance, instance->skeleton);
- scene_render->geometry_instance_set_material_override(geom->geometry_instance, instance->material_override);
- scene_render->geometry_instance_set_material_overlay(geom->geometry_instance, instance->material_overlay);
- scene_render->geometry_instance_set_surface_materials(geom->geometry_instance, instance->materials);
- scene_render->geometry_instance_set_transform(geom->geometry_instance, instance->transform, instance->aabb, instance->transformed_aabb);
- scene_render->geometry_instance_set_layer_mask(geom->geometry_instance, instance->layer_mask);
- scene_render->geometry_instance_set_lod_bias(geom->geometry_instance, instance->lod_bias);
- scene_render->geometry_instance_set_use_baked_light(geom->geometry_instance, instance->baked_light);
- scene_render->geometry_instance_set_use_dynamic_gi(geom->geometry_instance, instance->dynamic_gi);
- scene_render->geometry_instance_set_cast_double_sided_shadows(geom->geometry_instance, instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
- scene_render->geometry_instance_set_use_lightmap(geom->geometry_instance, RID(), instance->lightmap_uv_scale, instance->lightmap_slice_index);
- scene_render->geometry_instance_set_transparency(geom->geometry_instance, instance->transparency);
+ geom->geometry_instance->set_skeleton(instance->skeleton);
+ geom->geometry_instance->set_material_override(instance->material_override);
+ geom->geometry_instance->set_material_overlay(instance->material_overlay);
+ geom->geometry_instance->set_surface_materials(instance->materials);
+ geom->geometry_instance->set_transform(instance->transform, instance->aabb, instance->transformed_aabb);
+ geom->geometry_instance->set_layer_mask(instance->layer_mask);
+ geom->geometry_instance->set_lod_bias(instance->lod_bias);
+ geom->geometry_instance->set_transparency(instance->transparency);
+ geom->geometry_instance->set_use_baked_light(instance->baked_light);
+ geom->geometry_instance->set_use_dynamic_gi(instance->dynamic_gi);
+ geom->geometry_instance->set_use_lightmap(RID(), instance->lightmap_uv_scale, instance->lightmap_slice_index);
+ geom->geometry_instance->set_cast_double_sided_shadows(instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
if (instance->lightmap_sh.size() == 9) {
- scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, instance->lightmap_sh.ptr());
+ geom->geometry_instance->set_lightmap_capture(instance->lightmap_sh.ptr());
}
for (Instance *E : instance->visibility_dependencies) {
@@ -836,7 +836,7 @@ void RendererSceneCull::instance_set_layer_mask(RID p_instance, uint32_t p_mask)
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_layer_mask(geom->geometry_instance, p_mask);
+ geom->geometry_instance->set_layer_mask(p_mask);
}
}
@@ -848,7 +848,7 @@ void RendererSceneCull::instance_geometry_set_transparency(RID p_instance, float
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_transparency(geom->geometry_instance, p_transparency);
+ geom->geometry_instance->set_transparency(p_transparency);
}
}
@@ -1009,7 +1009,7 @@ void RendererSceneCull::instance_attach_skeleton(RID p_instance, RID p_skeleton)
_instance_update_mesh_instance(instance);
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_skeleton(geom->geometry_instance, p_skeleton);
+ geom->geometry_instance->set_skeleton(p_skeleton);
}
}
@@ -1129,7 +1129,7 @@ void RendererSceneCull::instance_geometry_set_flag(RID p_instance, RS::InstanceF
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_use_baked_light(geom->geometry_instance, p_enabled);
+ geom->geometry_instance->set_use_baked_light(p_enabled);
}
} break;
@@ -1149,7 +1149,7 @@ void RendererSceneCull::instance_geometry_set_flag(RID p_instance, RS::InstanceF
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_use_dynamic_gi(geom->geometry_instance, p_enabled);
+ geom->geometry_instance->set_use_dynamic_gi(p_enabled);
}
} break;
@@ -1207,7 +1207,7 @@ void RendererSceneCull::instance_geometry_set_cast_shadows_setting(RID p_instanc
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_cast_double_sided_shadows(geom->geometry_instance, instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
+ geom->geometry_instance->set_cast_double_sided_shadows(instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
}
_instance_queue_update(instance, false, true);
@@ -1222,7 +1222,7 @@ void RendererSceneCull::instance_geometry_set_material_override(RID p_instance,
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_material_override(geom->geometry_instance, p_material);
+ geom->geometry_instance->set_material_override(p_material);
}
}
@@ -1235,7 +1235,7 @@ void RendererSceneCull::instance_geometry_set_material_overlay(RID p_instance, R
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_material_overlay(geom->geometry_instance, p_material);
+ geom->geometry_instance->set_material_overlay(p_material);
}
}
@@ -1358,9 +1358,9 @@ void RendererSceneCull::_update_instance_visibility_dependencies(Instance *p_ins
bool end_enabled = p_instance->visibility_range_end > 0.0f;
float end_min = p_instance->visibility_range_end - p_instance->visibility_range_end_margin;
float end_max = p_instance->visibility_range_end + p_instance->visibility_range_end_margin;
- scene_render->geometry_instance_set_fade_range(idata.instance_geometry, begin_enabled, begin_min, begin_max, end_enabled, end_min, end_max);
+ idata.instance_geometry->set_fade_range(begin_enabled, begin_min, begin_max, end_enabled, end_min, end_max);
} else {
- scene_render->geometry_instance_set_fade_range(idata.instance_geometry, false, 0.0f, 0.0f, false, 0.0f, 0.0f);
+ idata.instance_geometry->set_fade_range(false, 0.0f, 0.0f, false, 0.0f, 0.0f);
}
}
@@ -1375,7 +1375,7 @@ void RendererSceneCull::_update_instance_visibility_dependencies(Instance *p_ins
} else {
idata.parent_array_index = -1;
if (is_geometry_instance) {
- scene_render->geometry_instance_set_parent_fade_alpha(idata.instance_geometry, 1.0f);
+ idata.instance_geometry->set_parent_fade_alpha(1.0f);
}
}
}
@@ -1407,7 +1407,7 @@ void RendererSceneCull::instance_geometry_set_lightmap(RID p_instance, RID p_lig
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_use_lightmap(geom->geometry_instance, lightmap_instance_rid, p_lightmap_uv_scale, p_slice_index);
+ geom->geometry_instance->set_use_lightmap(lightmap_instance_rid, p_lightmap_uv_scale, p_slice_index);
}
}
@@ -1419,7 +1419,7 @@ void RendererSceneCull::instance_geometry_set_lod_bias(RID p_instance, float p_l
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
- scene_render->geometry_instance_set_lod_bias(geom->geometry_instance, p_lod_bias);
+ geom->geometry_instance->set_lod_bias(p_lod_bias);
}
}
@@ -1587,11 +1587,11 @@ void RendererSceneCull::_update_instance(Instance *p_instance) {
if (!p_instance->lightmap_sh.is_empty()) {
p_instance->lightmap_sh.clear(); //don't need SH
p_instance->lightmap_target_sh.clear(); //don't need SH
- scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, nullptr);
+ geom->geometry_instance->set_lightmap_capture(nullptr);
}
}
- scene_render->geometry_instance_set_transform(geom->geometry_instance, p_instance->transform, p_instance->aabb, p_instance->transformed_aabb);
+ geom->geometry_instance->set_transform(p_instance->transform, p_instance->aabb, p_instance->transformed_aabb);
}
// note: we had to remove is equal approx check here, it meant that det == 0.000004 won't work, which is the case for some of our scenes.
@@ -1818,10 +1818,10 @@ void RendererSceneCull::_unpair_instance(Instance *p_instance) {
// Clear these now because the InstanceData containing the dirty flags is gone
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(p_instance->base_data);
- scene_render->geometry_instance_pair_light_instances(geom->geometry_instance, nullptr, 0);
- scene_render->geometry_instance_pair_reflection_probe_instances(geom->geometry_instance, nullptr, 0);
- scene_render->geometry_instance_pair_decal_instances(geom->geometry_instance, nullptr, 0);
- scene_render->geometry_instance_pair_voxel_gi_instances(geom->geometry_instance, nullptr, 0);
+ geom->geometry_instance->pair_light_instances(nullptr, 0);
+ geom->geometry_instance->pair_reflection_probe_instances(nullptr, 0);
+ geom->geometry_instance->pair_decal_instances(nullptr, 0);
+ geom->geometry_instance->pair_voxel_gi_instances(nullptr, 0);
}
for (Instance *E : p_instance->visibility_dependencies) {
@@ -1829,7 +1829,7 @@ void RendererSceneCull::_unpair_instance(Instance *p_instance) {
if (dep_instance->array_index != -1) {
dep_instance->scenario->instance_data[dep_instance->array_index].parent_array_index = -1;
if ((1 << dep_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) {
- scene_render->geometry_instance_set_parent_fade_alpha(dep_instance->scenario->instance_data[dep_instance->array_index].instance_geometry, 1.0f);
+ dep_instance->scenario->instance_data[dep_instance->array_index].instance_geometry->set_parent_fade_alpha(1.0f);
}
}
}
@@ -1990,7 +1990,7 @@ void RendererSceneCull::_update_instance_lightmap_captures(Instance *p_instance)
}
}
- scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, p_instance->lightmap_sh.ptr());
+ geom->geometry_instance->set_lightmap_capture(p_instance->lightmap_sh.ptr());
}
void RendererSceneCull::_light_instance_setup_directional_shadow(int p_shadow_index, Instance *p_instance, const Transform3D p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, bool p_cam_vaspect) {
@@ -2742,7 +2742,7 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
const int32_t &parent_idx = cull_data.scenario->instance_data[idata.parent_array_index].visibility_index;
fade = cull_data.scenario->instance_visibility[parent_idx].children_fade_alpha;
}
- scene_render->geometry_instance_set_parent_fade_alpha(idata.instance_geometry, fade);
+ idata.instance_geometry->set_parent_fade_alpha(fade);
}
if (geometry_instance_pair_mask & (1 << RS::INSTANCE_LIGHT) && (idata.flags & InstanceData::FLAG_GEOM_LIGHTING_DIRTY)) {
@@ -2757,14 +2757,14 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
}
}
- scene_render->geometry_instance_pair_light_instances(geom->geometry_instance, instance_pair_buffer, idx);
+ geom->geometry_instance->pair_light_instances(instance_pair_buffer, idx);
idata.flags &= ~uint32_t(InstanceData::FLAG_GEOM_LIGHTING_DIRTY);
}
if (idata.flags & InstanceData::FLAG_GEOM_PROJECTOR_SOFTSHADOW_DIRTY) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(idata.instance->base_data);
- scene_render->geometry_instance_set_softshadow_projector_pairing(geom->geometry_instance, geom->softshadow_count > 0, geom->projector_count > 0);
+ geom->geometry_instance->set_softshadow_projector_pairing(geom->softshadow_count > 0, geom->projector_count > 0);
idata.flags &= ~uint32_t(InstanceData::FLAG_GEOM_PROJECTOR_SOFTSHADOW_DIRTY);
}
@@ -2781,7 +2781,7 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
}
}
- scene_render->geometry_instance_pair_reflection_probe_instances(geom->geometry_instance, instance_pair_buffer, idx);
+ geom->geometry_instance->pair_reflection_probe_instances(instance_pair_buffer, idx);
idata.flags &= ~uint32_t(InstanceData::FLAG_GEOM_REFLECTION_DIRTY);
}
@@ -2797,7 +2797,7 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
break;
}
}
- scene_render->geometry_instance_pair_decal_instances(geom->geometry_instance, instance_pair_buffer, idx);
+ geom->geometry_instance->pair_decal_instances(instance_pair_buffer, idx);
idata.flags &= ~uint32_t(InstanceData::FLAG_GEOM_DECAL_DIRTY);
}
@@ -2813,7 +2813,7 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
}
}
- scene_render->geometry_instance_pair_voxel_gi_instances(geom->geometry_instance, instance_pair_buffer, idx);
+ geom->geometry_instance->pair_voxel_gi_instances(instance_pair_buffer, idx);
idata.flags &= ~uint32_t(InstanceData::FLAG_GEOM_VOXEL_GI_DIRTY);
}
@@ -2824,7 +2824,7 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
for (uint32_t j = 0; j < 9; j++) {
sh[j] = sh[j].lerp(target_sh[j], MIN(1.0, lightmap_probe_update_speed));
}
- scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, sh);
+ geom->geometry_instance->set_lightmap_capture(sh);
idata.instance->last_frame_pass = frame_number;
}
@@ -3245,7 +3245,7 @@ void RendererSceneCull::_render_scene(const RendererSceneRender::CameraData *p_c
render_sdfgi_data[i].instances.clear();
}
- // virtual void render_scene(RID p_render_buffers, const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold,const RenderShadowData *p_render_shadows,int p_render_shadow_count,const RenderSDFGIData *p_render_sdfgi_regions,int p_render_sdfgi_region_count,const RenderSDFGIStaticLightData *p_render_sdfgi_static_lights=nullptr) = 0;
+ // virtual void render_scene(RID p_render_buffers, const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold,const RenderShadowData *p_render_shadows,int p_render_shadow_count,const RenderSDFGIData *p_render_sdfgi_regions,int p_render_sdfgi_region_count,const RenderSDFGIStaticLightData *p_render_sdfgi_static_lights=nullptr) = 0;
}
RID RendererSceneCull::_render_get_environment(RID p_camera, RID p_scenario) {
@@ -3284,7 +3284,7 @@ void RendererSceneCull::render_empty_scene(RID p_render_buffers, RID p_scenario,
RendererSceneRender::CameraData camera_data;
camera_data.set_camera(Transform3D(), Projection(), true, false);
- scene_render->render_scene(p_render_buffers, &camera_data, &camera_data, PagedArray<RendererSceneRender::GeometryInstance *>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), RID(), RID(), p_shadow_atlas, RID(), scenario->reflection_atlas, RID(), 0, 0, nullptr, 0, nullptr, 0, nullptr);
+ scene_render->render_scene(p_render_buffers, &camera_data, &camera_data, PagedArray<RenderGeometryInstance *>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), RID(), RID(), p_shadow_atlas, RID(), scenario->reflection_atlas, RID(), 0, 0, nullptr, 0, nullptr, 0, nullptr);
#endif
}
@@ -3588,7 +3588,7 @@ void RendererSceneCull::render_probes() {
}
}
- scene_render->geometry_instance_pair_voxel_gi_instances(geom->geometry_instance, instance_pair_buffer, idx);
+ geom->geometry_instance->pair_voxel_gi_instances(instance_pair_buffer, idx);
ins->scenario->instance_data[ins->array_index].flags &= ~uint32_t(InstanceData::FLAG_GEOM_VOXEL_GI_DIRTY);
}
@@ -3851,7 +3851,7 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) {
p_instance->instance_allocated_shader_parameters = (p_instance->instance_shader_parameters.size() > 0);
if (p_instance->instance_allocated_shader_parameters) {
p_instance->instance_allocated_shader_parameters_offset = RSG::material_storage->global_variables_instance_allocate(p_instance->self);
- scene_render->geometry_instance_set_instance_shader_parameters_offset(geom->geometry_instance, p_instance->instance_allocated_shader_parameters_offset);
+ geom->geometry_instance->set_instance_shader_parameters_offset(p_instance->instance_allocated_shader_parameters_offset);
for (const KeyValue<StringName, Instance::InstanceShaderParameter> &E : p_instance->instance_shader_parameters) {
if (E.value.value.get_type() != Variant::NIL) {
@@ -3861,7 +3861,7 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) {
} else {
RSG::material_storage->global_variables_instance_free(p_instance->self);
p_instance->instance_allocated_shader_parameters_offset = -1;
- scene_render->geometry_instance_set_instance_shader_parameters_offset(geom->geometry_instance, -1);
+ geom->geometry_instance->set_instance_shader_parameters_offset(-1);
}
}
}
@@ -3874,7 +3874,7 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) {
if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(p_instance->base_data);
- scene_render->geometry_instance_set_surface_materials(geom->geometry_instance, p_instance->materials);
+ geom->geometry_instance->set_surface_materials(p_instance->materials);
}
}
diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h
index 9a46f6b873..851c7b6567 100644
--- a/servers/rendering/renderer_scene_cull.h
+++ b/servers/rendering/renderer_scene_cull.h
@@ -272,7 +272,7 @@ public:
RID base_rid;
union {
uint64_t instance_data_rid;
- RendererSceneRender::GeometryInstance *instance_geometry;
+ RenderGeometryInstance *instance_geometry;
InstanceVisibilityNotifierData *visibility_notifier = nullptr;
};
Instance *instance = nullptr;
@@ -578,7 +578,7 @@ public:
void _instance_queue_update(Instance *p_instance, bool p_update_aabb, bool p_update_dependencies = false);
struct InstanceGeometryData : public InstanceBaseData {
- RendererSceneRender::GeometryInstance *geometry_instance = nullptr;
+ RenderGeometryInstance *geometry_instance = nullptr;
HashSet<Instance *> lights;
bool can_cast_shadows;
bool material_is_animated;
@@ -782,14 +782,14 @@ public:
HashSet<Instance *> heightfield_particle_colliders_update_list;
PagedArrayPool<Instance *> instance_cull_page_pool;
- PagedArrayPool<RendererSceneRender::GeometryInstance *> geometry_instance_cull_page_pool;
+ PagedArrayPool<RenderGeometryInstance *> geometry_instance_cull_page_pool;
PagedArrayPool<RID> rid_cull_page_pool;
PagedArray<Instance *> instance_cull_result;
PagedArray<Instance *> instance_shadow_cull_result;
struct InstanceCullResult {
- PagedArray<RendererSceneRender::GeometryInstance *> geometry_instances;
+ PagedArray<RenderGeometryInstance *> geometry_instances;
PagedArray<Instance *> lights;
PagedArray<RID> light_instances;
PagedArray<RID> lightmaps;
@@ -800,10 +800,10 @@ public:
PagedArray<RID> fog_volumes;
struct DirectionalShadow {
- PagedArray<RendererSceneRender::GeometryInstance *> cascade_geometry_instances[RendererSceneRender::MAX_DIRECTIONAL_LIGHT_CASCADES];
+ PagedArray<RenderGeometryInstance *> cascade_geometry_instances[RendererSceneRender::MAX_DIRECTIONAL_LIGHT_CASCADES];
} directional_shadows[RendererSceneRender::MAX_DIRECTIONAL_LIGHTS];
- PagedArray<RendererSceneRender::GeometryInstance *> sdfgi_region_geometry_instances[SDFGI_MAX_CASCADES * SDFGI_MAX_REGIONS_PER_CASCADE];
+ PagedArray<RenderGeometryInstance *> sdfgi_region_geometry_instances[SDFGI_MAX_CASCADES * SDFGI_MAX_REGIONS_PER_CASCADE];
PagedArray<RID> sdfgi_cascade_lights[SDFGI_MAX_CASCADES];
void clear() {
@@ -882,7 +882,7 @@ public:
}
}
- void init(PagedArrayPool<RID> *p_rid_pool, PagedArrayPool<RendererSceneRender::GeometryInstance *> *p_geometry_instance_pool, PagedArrayPool<Instance *> *p_instance_pool) {
+ void init(PagedArrayPool<RID> *p_rid_pool, PagedArrayPool<RenderGeometryInstance *> *p_geometry_instance_pool, PagedArrayPool<Instance *> *p_instance_pool) {
geometry_instances.set_page_pool(p_geometry_instance_pool);
light_instances.set_page_pool(p_rid_pool);
lights.set_page_pool(p_instance_pool);
diff --git a/servers/rendering/renderer_scene_render.cpp b/servers/rendering/renderer_scene_render.cpp
index c0ad0d1187..1edff261dc 100644
--- a/servers/rendering/renderer_scene_render.cpp
+++ b/servers/rendering/renderer_scene_render.cpp
@@ -30,6 +30,9 @@
#include "renderer_scene_render.h"
+/////////////////////////////////////////////////////////////////////////////
+// CameraData
+
void RendererSceneRender::CameraData::set_camera(const Transform3D p_transform, const Projection p_projection, bool p_is_orthogonal, bool p_vaspect, const Vector2 &p_taa_jitter) {
view_count = 1;
is_orthogonal = p_is_orthogonal;
diff --git a/servers/rendering/renderer_scene_render.h b/servers/rendering/renderer_scene_render.h
index 641e280511..dc328f3e11 100644
--- a/servers/rendering/renderer_scene_render.h
+++ b/servers/rendering/renderer_scene_render.h
@@ -33,7 +33,9 @@
#include "core/math/projection.h"
#include "core/templates/paged_array.h"
+#include "servers/rendering/renderer_geometry_instance.h"
#include "servers/rendering/renderer_scene.h"
+#include "storage/utilities.h"
class RendererSceneRender {
public:
@@ -43,38 +45,11 @@ public:
MAX_RENDER_VIEWS = 2
};
- struct GeometryInstance {
- virtual ~GeometryInstance() {}
- };
-
- virtual GeometryInstance *geometry_instance_create(RID p_base) = 0;
- virtual void geometry_instance_set_skeleton(GeometryInstance *p_geometry_instance, RID p_skeleton) = 0;
- virtual void geometry_instance_set_material_override(GeometryInstance *p_geometry_instance, RID p_override) = 0;
- virtual void geometry_instance_set_material_overlay(GeometryInstance *p_geometry_instance, RID p_override) = 0;
- virtual void geometry_instance_set_surface_materials(GeometryInstance *p_geometry_instance, const Vector<RID> &p_material) = 0;
- virtual void geometry_instance_set_mesh_instance(GeometryInstance *p_geometry_instance, RID p_mesh_instance) = 0;
- virtual void geometry_instance_set_transform(GeometryInstance *p_geometry_instance, const Transform3D &p_transform, const AABB &p_aabb, const AABB &p_transformed_aabbb) = 0;
- virtual void geometry_instance_set_layer_mask(GeometryInstance *p_geometry_instance, uint32_t p_layer_mask) = 0;
- virtual void geometry_instance_set_lod_bias(GeometryInstance *p_geometry_instance, float p_lod_bias) = 0;
- virtual void geometry_instance_set_transparency(GeometryInstance *p_geometry_instance, float p_transparency) = 0;
- virtual void geometry_instance_set_fade_range(GeometryInstance *p_geometry_instance, bool p_enable_near, float p_near_begin, float p_near_end, bool p_enable_far, float p_far_begin, float p_far_end) = 0;
- virtual void geometry_instance_set_parent_fade_alpha(GeometryInstance *p_geometry_instance, float p_alpha) = 0;
- virtual void geometry_instance_set_use_baked_light(GeometryInstance *p_geometry_instance, bool p_enable) = 0;
- virtual void geometry_instance_set_use_dynamic_gi(GeometryInstance *p_geometry_instance, bool p_enable) = 0;
- virtual void geometry_instance_set_use_lightmap(GeometryInstance *p_geometry_instance, RID p_lightmap_instance, const Rect2 &p_lightmap_uv_scale, int p_lightmap_slice_index) = 0;
- virtual void geometry_instance_set_lightmap_capture(GeometryInstance *p_geometry_instance, const Color *p_sh9) = 0;
- virtual void geometry_instance_set_instance_shader_parameters_offset(GeometryInstance *p_geometry_instance, int32_t p_offset) = 0;
- virtual void geometry_instance_set_cast_double_sided_shadows(GeometryInstance *p_geometry_instance, bool p_enable) = 0;
+ /* Geometry Instance */
+ virtual RenderGeometryInstance *geometry_instance_create(RID p_base) = 0;
+ virtual void geometry_instance_free(RenderGeometryInstance *p_geometry_instance) = 0;
virtual uint32_t geometry_instance_get_pair_mask() = 0;
- virtual void geometry_instance_pair_light_instances(GeometryInstance *p_geometry_instance, const RID *p_light_instances, uint32_t p_light_instance_count) = 0;
- virtual void geometry_instance_pair_reflection_probe_instances(GeometryInstance *p_geometry_instance, const RID *p_reflection_probe_instances, uint32_t p_reflection_probe_instance_count) = 0;
- virtual void geometry_instance_pair_decal_instances(GeometryInstance *p_geometry_instance, const RID *p_decal_instances, uint32_t p_decal_instance_count) = 0;
- virtual void geometry_instance_pair_voxel_gi_instances(GeometryInstance *p_geometry_instance, const RID *p_voxel_gi_instances, uint32_t p_voxel_gi_instance_count) = 0;
-
- virtual void geometry_instance_set_softshadow_projector_pairing(GeometryInstance *p_geometry_instance, bool p_softshadow, bool p_projector) = 0;
-
- virtual void geometry_instance_free(GeometryInstance *p_geometry_instance) = 0;
/* SHADOW ATLAS API */
@@ -205,19 +180,19 @@ public:
virtual RID voxel_gi_instance_create(RID p_voxel_gi) = 0;
virtual void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) = 0;
virtual bool voxel_gi_needs_update(RID p_probe) const = 0;
- virtual void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<GeometryInstance *> &p_dynamic_objects) = 0;
+ virtual void voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RenderGeometryInstance *> &p_dynamic_objects) = 0;
virtual void voxel_gi_set_quality(RS::VoxelGIQuality) = 0;
struct RenderShadowData {
RID light;
int pass = 0;
- PagedArray<GeometryInstance *> instances;
+ PagedArray<RenderGeometryInstance *> instances;
};
struct RenderSDFGIData {
int region = 0;
- PagedArray<GeometryInstance *> instances;
+ PagedArray<RenderGeometryInstance *> instances;
};
struct RenderSDFGIUpdateData {
@@ -249,10 +224,10 @@ public:
void set_multiview_camera(uint32_t p_view_count, const Transform3D *p_transforms, const Projection *p_projections, bool p_is_orthogonal, bool p_vaspect);
};
- virtual void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) = 0;
+ virtual void render_scene(RID p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RendererScene::RenderInfo *r_render_info = nullptr) = 0;
- virtual void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
- virtual void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<GeometryInstance *> &p_instances) = 0;
+ virtual void render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
+ virtual void render_particle_collider_heightfield(RID p_collider, const Transform3D &p_transform, const PagedArray<RenderGeometryInstance *> &p_instances) = 0;
virtual void set_scene_pass(uint64_t p_pass) = 0;
virtual void set_time(double p_time, double p_step) = 0;
diff --git a/servers/rendering/renderer_viewport.h b/servers/rendering/renderer_viewport.h
index 027f2dfad6..4647fbd8c3 100644
--- a/servers/rendering/renderer_viewport.h
+++ b/servers/rendering/renderer_viewport.h
@@ -48,33 +48,34 @@ public:
RID self;
RID parent;
- bool use_xr; /* use xr interface to override camera positioning and projection matrices and control output */
+ // use xr interface to override camera positioning and projection matrices and control output
+ bool use_xr = false;
Size2i internal_size;
Size2i size;
RID camera;
RID scenario;
- RS::ViewportScaling3DMode scaling_3d_mode;
+ RS::ViewportScaling3DMode scaling_3d_mode = RenderingServer::VIEWPORT_SCALING_3D_MODE_BILINEAR;
float scaling_3d_scale = 1.0;
float fsr_sharpness = 0.2f;
float fsr_mipmap_bias = 0.0f;
- bool fsr_enabled;
- RS::ViewportUpdateMode update_mode;
+ bool fsr_enabled = false;
+ RS::ViewportUpdateMode update_mode = RenderingServer::VIEWPORT_UPDATE_WHEN_VISIBLE;
RID render_target;
RID render_target_texture;
RID render_buffers;
- RS::ViewportMSAA msaa;
- RS::ViewportScreenSpaceAA screen_space_aa;
- bool use_taa;
- bool use_debanding;
+ RS::ViewportMSAA msaa = RenderingServer::VIEWPORT_MSAA_DISABLED;
+ RS::ViewportScreenSpaceAA screen_space_aa = RenderingServer::VIEWPORT_SCREEN_SPACE_AA_DISABLED;
+ bool use_taa = false;
+ bool use_debanding = false;
RendererSceneRender::CameraData prev_camera_data;
uint64_t prev_camera_data_frame = 0;
- bool use_occlusion_culling;
- bool occlusion_buffer_dirty;
+ bool use_occlusion_culling = false;
+ bool occlusion_buffer_dirty = false;
DisplayServer::WindowID viewport_to_screen;
Rect2 viewport_to_screen_rect;
@@ -83,10 +84,10 @@ public:
bool disable_2d = false;
bool disable_environment = false;
bool disable_3d = false;
- bool measure_render_time;
+ bool measure_render_time = false;
- bool snap_2d_transforms_to_pixel;
- bool snap_2d_vertices_to_pixel;
+ bool snap_2d_transforms_to_pixel = false;
+ bool snap_2d_vertices_to_pixel = false;
uint64_t time_cpu_begin;
uint64_t time_cpu_end;
@@ -95,23 +96,23 @@ public:
uint64_t time_gpu_end;
RID shadow_atlas;
- int shadow_atlas_size;
+ int shadow_atlas_size = 2048;
bool shadow_atlas_16_bits = true;
- bool sdf_active;
+ bool sdf_active = false;
float mesh_lod_threshold = 1.0;
uint64_t last_pass = 0;
- RS::ViewportDebugDraw debug_draw;
+ RS::ViewportDebugDraw debug_draw = RenderingServer::VIEWPORT_DEBUG_DRAW_DISABLED;
- RS::ViewportClearMode clear_mode;
+ RS::ViewportClearMode clear_mode = RenderingServer::VIEWPORT_CLEAR_ALWAYS;
RS::CanvasItemTextureFilter texture_filter = RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR;
RS::CanvasItemTextureRepeat texture_repeat = RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED;
- bool transparent_bg;
+ bool transparent_bg = false;
struct CanvasKey {
int64_t stacking;
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index cfabddded3..bb41b06189 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -310,6 +310,7 @@ const ShaderLanguage::KeyWord ShaderLanguage::keyword_list[] = {
// global space keywords
{ TK_UNIFORM, "uniform", CF_GLOBAL_SPACE | CF_UNIFORM_KEYWORD, {}, {} },
+ { TK_UNIFORM_GROUP, "group_uniforms", CF_GLOBAL_SPACE, {}, {} },
{ TK_VARYING, "varying", CF_GLOBAL_SPACE, { "particles", "sky", "fog" }, {} },
{ TK_CONST, "const", CF_BLOCK | CF_GLOBAL_SPACE | CF_CONST_KEYWORD, {}, {} },
{ TK_STRUCT, "struct", CF_GLOBAL_SPACE, {}, {} },
@@ -1146,6 +1147,8 @@ void ShaderLanguage::clear() {
current_function = StringName();
last_name = StringName();
last_type = IDENTIFIER_MAX;
+ current_uniform_group_name = "";
+ current_uniform_subgroup_name = "";
completion_type = COMPLETION_NONE;
completion_block = nullptr;
@@ -3853,18 +3856,11 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector<ShaderLanguage::C
}
value = Variant(array);
} else {
- Basis p;
- p[0][0] = p_value[0].real;
- p[0][1] = p_value[1].real;
- p[0][2] = p_value[2].real;
- p[1][0] = p_value[4].real;
- p[1][1] = p_value[5].real;
- p[1][2] = p_value[6].real;
- p[2][0] = p_value[8].real;
- p[2][1] = p_value[9].real;
- p[2][2] = p_value[10].real;
- Transform3D t = Transform3D(p, Vector3(p_value[3].real, p_value[7].real, p_value[11].real));
- value = Variant(t);
+ Projection p = Projection(Vector4(p_value[0].real, p_value[1].real, p_value[2].real, p_value[3].real),
+ Vector4(p_value[4].real, p_value[5].real, p_value[6].real, p_value[7].real),
+ Vector4(p_value[8].real, p_value[9].real, p_value[10].real, p_value[11].real),
+ Vector4(p_value[12].real, p_value[13].real, p_value[14].real, p_value[15].real));
+ value = Variant(p);
}
break;
}
@@ -8298,6 +8294,8 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f
uniform.scope = uniform_scope;
uniform.precision = precision;
uniform.array_size = array_size;
+ uniform.group = current_uniform_group_name;
+ uniform.subgroup = current_uniform_subgroup_name;
tk = _get_token();
if (tk.type == TK_BRACKET_OPEN) {
@@ -8724,6 +8722,45 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f
}
} break;
+ case TK_UNIFORM_GROUP: {
+ tk = _get_token();
+ if (tk.type == TK_IDENTIFIER) {
+ current_uniform_group_name = tk.text;
+ tk = _get_token();
+ if (tk.type == TK_PERIOD) {
+ tk = _get_token();
+ if (tk.type == TK_IDENTIFIER) {
+ current_uniform_subgroup_name = tk.text;
+ tk = _get_token();
+ if (tk.type != TK_SEMICOLON) {
+ _set_expected_error(";");
+ return ERR_PARSE_ERROR;
+ }
+ } else {
+ _set_error(RTR("Expected an uniform subgroup identifier."));
+ return ERR_PARSE_ERROR;
+ }
+ } else if (tk.type != TK_SEMICOLON) {
+ _set_expected_error(";", ".");
+ return ERR_PARSE_ERROR;
+ }
+ } else {
+ if (tk.type != TK_SEMICOLON) {
+ if (current_uniform_group_name.is_empty()) {
+ _set_error(RTR("Expected an uniform group identifier."));
+ } else {
+ _set_error(RTR("Expected an uniform group identifier or `;`."));
+ }
+ return ERR_PARSE_ERROR;
+ } else if (tk.type == TK_SEMICOLON && current_uniform_group_name.is_empty()) {
+ _set_error(RTR("Group needs to be opened before."));
+ return ERR_PARSE_ERROR;
+ } else {
+ current_uniform_group_name = "";
+ current_uniform_subgroup_name = "";
+ }
+ }
+ } break;
case TK_SHADER_TYPE: {
_set_error(RTR("Shader type is already defined."));
return ERR_PARSE_ERROR;
diff --git a/servers/rendering/shader_language.h b/servers/rendering/shader_language.h
index 4a67e4d088..42023f25d7 100644
--- a/servers/rendering/shader_language.h
+++ b/servers/rendering/shader_language.h
@@ -154,6 +154,7 @@ public:
TK_SEMICOLON,
TK_PERIOD,
TK_UNIFORM,
+ TK_UNIFORM_GROUP,
TK_INSTANCE,
TK_GLOBAL,
TK_VARYING,
@@ -687,6 +688,8 @@ public:
TextureRepeat repeat = REPEAT_DEFAULT;
float hint_range[3];
int instance_index = 0;
+ String group;
+ String subgroup;
Uniform() {
hint_range[0] = 0.0f;
@@ -938,6 +941,9 @@ private:
StringName last_name;
bool is_shader_inc = false;
+ String current_uniform_group_name;
+ String current_uniform_subgroup_name;
+
VaryingFunctionNames varying_function_names;
TkPos _get_tkpos() {